如何编写程序以显示在使用fork()
后它是子进程还是父进程?
我需要找到其他方法,然后检查fork()
或getpid()
函数的返回值。
我知道,例如该进程资源利用率(getrusage(2)
)和CPU时间计数器(times(2)
)在子进程中重置为零。我如何使用例如知识(或其他孩子 - 父母的差异)来确定我的问题?
感谢您的帮助!
答案 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()
,但与上面描述的方式不同。