我在書本中以及在子進程的PID分配給其父一些網上論壇上閱讀。但是,我有這樣的代碼:是否將子進程pid()分配給父進程?
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
pid_t pid;
pid=fork();
if(pid==0)
{
printf("In Child Process\n");
printf("Child process PID : %d\n",getpid());
printf("Parent Process PID : %d\n",getppid());
}
else
{
printf("In Parent Process\n");
printf("Child PID : %d\n",getpid());
printf("Parent PID : %d\n",getppid());
}
}
它輸出:
In Parent Process Child PID : 2061 Parent PID : 1830 In Child Process Child process PID : 2062 Parent Process PID : 1161
但如果我寫了等待中的其他塊()函數,即:
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
pid_t pid;
pid=fork();
if(pid==0)
{
printf("In Child Process\n");
printf("Child process PID : %d\n",getpid());
printf("Parent Process PID : %d\n",getppid());
}
else
{
wait();
printf("In Parent Process\n");
printf("Child PID : %d\n",getpid());
printf("Parent PID : %d\n",getppid());
}
}
它輸出 -
In Child Process Child process PID : 2044 Parent Process PID : 2043 In Parent Process Child PID : 2043 Parent PID : 1830
我沒有得到爲什麼PID值retur第一個代碼中的子進程ned與父進程pid不同。 而在第二個代碼中,它是相同的。有人可以解釋上述問題的原因嗎?
你看過嗎,哪個過程實際上是1830?從我所記得的情況來看,如果父進程運行完畢,並且孤兒子進程仍然存在,則它可能是1830年的進程「init」。 – icbytes
@icbytes init進程始終是進程1.更有可能pid 1830是shell的pid。 –
然後它不是「init」,thx。 – icbytes