我正在调用一个外部程序(通过 Node 中的 pty.js),当它运行时,它会生成一个子进程。当父进程完成时,它会让子进程继续运行一段时间(孤立进程)。我可以获得父进程的 id,但想获取所生成的子进程的 id,以便在父进程退出时杀死它。
我不相信node中有任何方法可以实现这一点,那么C中有什么东西可以让你在只知道父id的情况下获取子id。到目前为止,我发现的所有内容都与从 fork() 获取子 ID 相关,但 fork 发生在外部程序中。
或者,我想我可以调用 ps 或 pstree/类似的东西并解析输出,但感觉有点像黑客。
编辑
这不太好,但到目前为止我已经想出了这个:
#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();
您还可以使用 kill 终止子进程。 .
pty.js
使用伪终端进行 fork ,这在模拟终端时很有用。否则你应该使用 child_process
产生/ fork 新进程。
关于c - 获取已运行进程的子进程ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18076968/