簡體   English   中英

fork()之后創建的子進程的父pid_t

[英]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進程的pid1

嘗試在父進程中放一個wait() !!

這是因為父進程在子進程運行之前退出,而子進程則保留了第一個進程的子進程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM