确定进程是子进程还是父进程(不使用fork的返回值)

时间:2015-05-03 14:29:48

标签: c linux fork

如何编写程序以显示在使用fork()后它是子进程还是父进程?

我需要找到其他方法,然后检查fork()getpid()函数的返回值。

我知道,例如该进程资源利用率(getrusage(2))和CPU时间计数器(times(2))在子进程中重置为零。我如何使用例如知识(或其他孩子 - 父母的差异)来确定我的问题?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以利用父级将成为进程组领导者的事实(因此其pid将与其进程组ID相同),而子级将成为该进程组的成员,因此其pid将是不同的来自进程组ID:

#include <stdio.h>
#include <unistd.h>

main(int argc, char **argv) {
    char *self = NULL;

    fork(); /* looking at return value would be cheating */
    int pid = getpid();
    int pgid = getpgid(0);

    if (pid == pgid)
        self = "Parent";
    else
        self = "Child";

    printf("%s pid = %d pgid = %d\n", self, pid, pgid);
}

运行收益率:

$ ./pgid
Parent pid = 29400 pgid = 29400
Child pid = 29401 pgid = 29400

这当然仍然使用getpid(),但与上面描述的方式不同。