系统()后获取子PID

据我所知, system()调用在内部使用fork()exec()但封装它们以便于处理。

是否有可能从用system()调用创build的subprocess获取PID?

目标:我希望在某个超时之后能够SIGINT任何subprocess。 我可以使用fork()exec()重buildsystem()函数。 但是我需要的只是孩子的PID,也许有使用system()快捷方式?

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

在使用system()时候没有办法(我知道的system() 。 另外,使用system()还有一个额外的步骤来启动一个shell来执行你的命令,这样做有点难度。 你可能更好用fork()exec()替换它。

但是,有一种方法可以通过/ proc文件系统来做你想做的事情。 您可以通过进程目录(目录名称是PID)并检查“状态”文件。 他们每个人都有一个PPID条目指定父pid。

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

我有这个问题。 解决它:

 int syspid,status; pid_t ppid=getpid(); syspid=ppid+1 status=system(argv[1]); //here argv1 was another program; 

这可能并不总是有效,但是大多数情况下,system()的PID是父节点的pid +1(除非有多个分支)。