4

据我了解,该system()调用在内部使用fork()exec()但将它们封装起来以便于处理。

是否可以从调用创建的子进程中获取 PID system()

目标:我希望能够在某个超时后对任何子进程进行 SIGINT。system()我可以使用fork()and重建函数exec()。但我所需要的只是孩子的 PID,也许使用有捷径system()

4

4 回答 4

8

通常,system()是同步操作。这意味着在子进程退出之前它不会返回,即system()返回时子进程没有有效的PID,因为子进程不再存在。

于 2009-10-15T07:58:52.893 回答
4

使用system(). 此外,system()还有一个额外的步骤是启动一个 shell 来执行你的命令,这让这变得有点困难。您最好用fork()and替换它exec()

于 2009-10-15T08:02:10.430 回答
0

我有这个问题。通过以下方式解决了它:

int syspid,status;
pid_t ppid=getpid();
syspid=ppid+1

status=system(argv[1]); //here argv1 was another program;

这可能并不总是有效,但大多数时候 system() 的 PID 是父进程的 pid +1(除非你有多个分叉)。

于 2015-02-17T07:45:00.840 回答
-1

但是,有一种方法可以通过 /proc 文件系统执行您想要的操作。您可以浏览进程目录(目录名称是 PID)并检查“状态”文件。它们每个都有一个 PPid 条目,指定父 pid。

这样,如果您获得一个“状态”文件,它将您的进程的 PID 指定为 PPID,那么它在 /proc 文件系统中的文件夹名称就是您要查找的值。

于 2010-07-21T14:02:11.933 回答