获取已经运行的进程的subprocessID

我正在调用一个外部程序(通过节点中的pty.js),当它运行时产生一个subprocess。 当父进程结束时,它会让孩子离开一段时间(孤儿)。 我可以得到父进程的id,但是想要得到产生的subprocess的id,所以当父进程退出的时候我可以把它杀掉。

我不相信在节点上有什么办法可以达到这个目的,那么C中有什么可以让你知道一个孩子的ID,只知道父母的ID。 到目前为止,我发现的一切都是从fork()获取子id,但fork是在外部程序中发生的。

另外,我想我可以打电话给ps或pstree /类似的东西,parsing输出,但感觉就像一个黑客。

编辑

这不是很好,但我已经拿出这个到目前为止:

#include <limits.h> #include <stdio.h> int main(int argc, char *argv[]) { int id = atoi(argv[1]); int i; for(i = 0; i < INT_MAX; i++) { if(i != id && getpgid(i) == id) { printf("Process %d, is a child of %d", i, id); break; } } } 

在node.js中,你可以通过child_process库来完成。 有一个PID成员函数返回生成的孩子的PID。 例如

 var spawn = require('child_process').spawn, grep = spawn('grep', ['ssh']); console.log('Spawned child pid: ' + grep.pid); grep.stdin.end(); 

你也可以杀死subprocess。

pty.js与伪terminal进行分叉,如果仿真terminal,这是有用的。 否则,你应该使用child_process来产生/分叉新的进程。

如果您可以在父进程的末尾添加此代码:

 int i ; while(1) { i = wait();//wait child exit if(i == -1)//if there is no child process break; } 

如果你不能。 那你就不用做了

这是问题:

如果父进程完成但subprocess没有完成,这些subprocess称为:“ 孤儿进程不是僵尸 ”。 “僵尸程序”是指在专利程序仍在运行的情况下完成的子程序,父程序不处理子程序的后果。

由于系统将设置“ init ”成为所有“孤儿进程”的父代init进程将处理所有事情。 所以你不需要做任何事情!