Linux/POSIX中有没有方法或者C api来判断当前进程是不是fork? IE。如果它是通过调用 fork()
创建的,而没有随后调用 execve()
系列?
我不控制导致这一点的代码(它在高级语言绑定(bind)中运行)。我只需要知道当前进程是在运行顶级程序,还是在其分支中。
我想出的最好办法是测试进程是否与其父进程具有相同的 gid:
int is_fork = getpgid(0) == getpgid(getppid());
然而,这仅在父级调用了 setpgid()
时有效,显然 execve()
默认情况下不会执行。所以这会导致很多误报。
最佳答案
在 Linux 上,一种不太精确的检查是查看进程的可执行文件 (/proc/$pid/exe
) 是否与其父进程的相同。但是,如果进程 exec
有自己的可执行文件,这将不起作用,这在某些环境(例如 shell)中可能很常见。
关于c - 如何测试调用进程是否是fork,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42176865/