据我了解,该system()
调用在内部使用fork()
,exec()
但将它们封装起来以便于处理。
是否可以从调用创建的子进程中获取 PID system()
?
目标:我希望能够在某个超时后对任何子进程进行 SIGINT。system()
我可以使用fork()
and重建函数exec()
。但我所需要的只是孩子的 PID,也许使用有捷径system()
?
通常,system()
是同步操作。这意味着在子进程退出之前它不会返回,即system()
返回时子进程没有有效的PID,因为子进程不再存在。
使用system()
. 此外,system()
还有一个额外的步骤是启动一个 shell 来执行你的命令,这让这变得有点困难。您最好用fork()
and替换它exec()
。
我有这个问题。通过以下方式解决了它:
int syspid,status;
pid_t ppid=getpid();
syspid=ppid+1
status=system(argv[1]); //here argv1 was another program;
这可能并不总是有效,但大多数时候 system() 的 PID 是父进程的 pid +1(除非你有多个分叉)。
但是,有一种方法可以通过 /proc 文件系统执行您想要的操作。您可以浏览进程目录(目录名称是 PID)并检查“状态”文件。它们每个都有一个 PPid 条目,指定父 pid。
这样,如果您获得一个“状态”文件,它将您的进程的 PID 指定为 PPID,那么它在 /proc 文件系统中的文件夹名称就是您要查找的值。