[英]Parent pid_t of a child process created after fork()
我有以下功能:
void test_fork()
{
pid_t id;
printf("Parent process id: %d\n", getpid());
id = fork();
if (id == 0)
printf("\nChild:");
else if (id > 0)
printf("\nParent:");
else
exit(EXIT_FAILURE);
printf("\nprocess id: %d\n", getpid());
printf("parent process id: %d\n", getppid());
}
我的疑問與其輸出有關,特別是有時候我有以下和簡單的輸出:
Parent process id: 879
Parent:
process id: 879
parent process id: 878
Child:
process id: 881
parent process id: 879
最后一個id等於其父ID(如預期的那樣)。
但有時輸出是例如:
Parent process id: 858
Parent:
process id: 858
parent process id: 857
Child:
process id: 860
parent process id: 1
最后一個id不等於其父進程id,但它等於1(應該是init進程的id)。
怎么可能?
這是因為父進程已經在子進程請求其父進程的pid時完成,因此子進程的父進程默認為init
進程。 init進程的pid
為1
。
嘗試在父進程中放一個wait()
!!
這是因為父進程在子進程運行之前退出,而子進程則保留了第一個進程的子進程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.