c - 获取已运行进程的子进程ID

标签 c node.js process

我正在调用一个外部程序(通过 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/

相关文章:

C# 进程不接受我的参数

c - 使用单个 system() 调用在 C 中执行多个命令

c - 在 C 中初始化地址为零的变量

node.js - 未找到 sudo npm install 命令

javascript - Mongoose & 获取集合中的平均评分?

C mini shell,处理 SIGCHLD 的问题

c - 使用 fscanf() 跳过字符串

c - C 中的多个源文件- makefile 究竟如何工作?

node.js - 如何在 MongoDB 中创建动态查询?

C fork 使用与用户输入