gpt4 book ai didi

linux - 一个命令的所有子进程的PID

转载 作者:太空狗 更新时间:2023-10-29 12:11:34 24 4
gpt4 key购买 nike

在 bash 脚本中,我想在前台启动一个进程,然后打印作为该进程的子进程启动的所有进程名称和 PID 的列表。例如,假设我有以下脚本,但我只能修改第一个:

A.sh:

#!/bin/bash
B.sh

B.sh:

#!/bin/bash
C.sh

C.sh:

#!/bin/bash
echo "Running C.sh"

不修改 B.sh、C.sh 或 echo 命令,也不在后台启动任何子进程,我希望 A.sh 打印以下内容:

B.sh 1208
C.sh 1210
echo 1211

当子进程在 A.sh 的前台运行时,A.sh 是否可以 fork 一个记录此信息的进程?

最佳答案

更新:在我的回答下方的评论中,事实证明:

I need something that observes the creation of all child processes during a span of time. Given that, filtering to isolate my subtree will not be difficult.

... 是问题背后的意图,它是为了调试目的。

在那种情况下,我建议像这样使用 strace:

strace -f command

-f 将递归地跟踪子进程。由于 fork 和执行需要系统调用,strace 将列出所有子创建以及 pids。


原答案:

您可以为此使用 pgrep:

run_process &
pid=${!}
pgrep --parent "${pid}"
wait # wait for run_process to finish

顺便说一句,您可能想使用 pstree 命令,它很好用:

run_process &
pid=${!}
pstree -p "${pid}"
wait # wait for run_process to finish

无论如何,您需要安装pstree

关于linux - 一个命令的所有子进程的PID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42675166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com