系统后获取子PID()

时间:2009-10-15 07:56:33

标签: linux exec fork

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

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

目标:我希望能够在特定超时后SIGINT任何子进程。我可以使用system()fork()重建exec()函数。但我需要的只是孩子的PID,也许使用system()

有捷径

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:4)

使用system()时无法(我知道)。此外,使用system()还有一个启动shell的附加步骤,它会执行你的命令,这使得这有点困难。您可能最好用fork()exec()替换它。

答案 2 :(得分:-1)

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

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

答案 3 :(得分:-1)

我有这个问题。解决了它:

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

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

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