c - 如何测试调用进程是否是fork

标签 c linux fork exec posix

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/

相关文章:

从 Linux 中提取硬盘驱动器信息的 Java 代码

Linux:在运行时检测一个进程有多个线程

c - setlocale() 的默认值是什么意思?

我们可以将 const char * 转换为 char * 并更改内容 : is this safe operation?

c - 匹配什么样的括号括住字符串并将其删除

c - 这是在fork上关闭套接字描述符的正确方法吗?

C 管道写/读优先级

c - 使用 C 中的子进程发送和处理信号时遇到问题

c - 通过函数传递时指向 NULL 的全局链表

c - 为什么人们不使用异或交换?