Bash 获取从父进程创建的所有子/孙进程的PID

Bash 获取从父进程创建的所有子/孙进程的PID,bash,shell,fork,pid,child-process,Bash,Shell,Fork,Pid,Child Process,假设我有这样一个过程: #!/usr/bin/env bash node foo.js & pid=$! 有没有办法监听从pid创建的子进程? 我想创建一个从pid创建/分叉的pid列表。也就是说,任何pid的孩子或孙子,我都想知道,不知怎么的 现在,我正在将每个子进程的pid记录到stdout中,并以这种方式捕获它,但这存在一些问题。这不是一个通用的解决方案,特别是如果我不能控制所有的子进程,或者如果它们的stdout被重定向。您可以通过pstree或ps--tree从中获取子进程

假设我有这样一个过程:

#!/usr/bin/env bash

node foo.js &
pid=$!
有没有办法监听从pid创建的子进程? 我想创建一个从pid创建/分叉的pid列表。也就是说,任何pid的孩子或孙子,我都想知道,不知怎么的


现在,我正在将每个子进程的pid记录到stdout中,并以这种方式捕获它,但这存在一些问题。这不是一个通用的解决方案,特别是如果我不能控制所有的子进程,或者如果它们的stdout被重定向。

您可以通过pstree或ps--tree从中获取子进程PID。

我认为解决此问题的最佳方法是使用以下方法:

#!/usr/bin/env bash

node foo.js &
pid=$!

sleep 5;

pgrep -P $pid | xargs kill -INT
这将向$pid的所有子进程发送SIGINT信号


您想用pids做什么?如果你要给他们发信号,你可以通过进程组来做,而不需要知道所有的PID。
pgrep-P
似乎也能工作耶pgrep似乎更容易:)