【问题标题】:Get pids of all child/grandchild processes created from parent process [duplicate]获取从父进程创建的所有子/孙进程的 pid [重复]
【发布时间】:2018-09-26 01:06:33
【问题描述】:

假设我有一个这样的过程:

#!/usr/bin/env bash

node foo.js &
pid=$!

有没有办法监听从 pid 创建的子进程? 我想创建一个从 pid 创建/派生的 pid 列表。也就是说,pid 的任何孩子或孙子,我都想知道它,不知何故

是的,现在我将每个子进程的 pid 记录到标准输出并以这种方式捕获它,但是这样做有几个问题。这不是一个通用的解决方案,特别是如果我不控制所有子进程,或者如果他们的标准输出被重定向。

【问题讨论】:

  • 你想用 pid 做什么?如果您要向他们发出信号,您可以在不知道所有 pid 的情况下按进程组执行此操作。

标签: bash shell fork pid child-process


【解决方案1】:

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

【讨论】:

  • pgrep -P <pid> 似乎也有效
  • 是的 pgrep 似乎更容易:)
【解决方案2】:

我认为这个问题的最佳解决方案是使用这种方法:

#!/usr/bin/env bash

node foo.js &
pid=$!

sleep 5;

pgrep -P $pid | xargs kill -INT

这会将 SIGINT 信号发送到 $pid 的所有子进程。

https://linux.die.net/man/1/pgrep

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2023-04-04
    • 2011-06-01
    • 2021-08-08
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    相关资源
    最近更新 更多