在shell中使用Fork命令打印进程id



我试图在运行fork()命令后打印进程的pid。这是我的代码-

#include <stdio.h>
#include <unistd.h>
int main(void)
{
    int pid;
    pid=fork();
    if(pid==0)
        printf("I am the child.My pid is %d .My parents pid is %d n",getpid(),getppid());
    else
        printf("I am the parent.My pid is %d. My childs pid is %d n",getpid(),pid);
    return 0;
}

这是我得到的答案-

I am the parent.My pid is 2420. My childs pid is 3601 
I am the child.My pid is 3601 .My parents pid is 1910 

为什么父母id在第二行不是2420 .为什么我得到1910我怎么能得到这个值?

父进程在子进程执行printf调用之前退出。当父进程退出时,子进程将获得一个新的父进程。默认情况下,这是init进程,PID 1。但是最近的Unix版本增加了进程声明自己为"子收割者"的能力,它继承了所有孤儿。PID 1910显然是您系统上的子收集器。关于这方面的更多信息,请参阅https://unix.stackexchange.com/a/177361/61098。

在父进程中调用wait(),使其等待子进程退出后再继续。

#include <stdio.h>
#include <unistd.h>
int main(void)
{
    int pid;
    pid=fork();
    if(pid==0) {
        printf("I am the child.My pid is %d .My parents pid is %d n",getpid(),getppid());
    } else {
        printf("I am the parent.My pid is %d. My childs pid is %d n",getpid(),pid);
        wait(NULL);
    }
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新