如何在 bash 中启动虚拟进程,该进程将启动另外七个后代进程

Mys*_*ack 4 bash shell-script

我正在尝试编写一个 bash 脚本,它将以下面的格式记录所有后代进程信息,但只有当一个进程有超过六个后代进程时,我才必须记录信息。

PID PPID 等级
10 9 1(表示孩子)
9 8 2(表示父级)
8 7 3(表示祖父母)
Pstree -ps 10 should display:
dummy1---dummy2---dummy3---dummy4---dummy5---dummy6---dummy7
Run Code Online (Sandbox Code Playgroud)

如何以上述方式触发虚拟进程?

坦率地说,我对 bash 脚本一无所知,我唯一能做的就是显示特定用户的 PID。

while read -r processId;
do
    echo $processId
done <<< "$(ps -u $USER -o pid)"
Run Code Online (Sandbox Code Playgroud)

我需要循环每个 PID 并检查它是否有超过 6 个后代,但在此之前我想手动触发 6 个后代进程来启动和测试我的脚本。

Ste*_*itt 6

要启动具有七个后代的脚本,您可以使用如下内容:

\n
#!/bin/bash\n\nif [[ "$#" -ne 1 ]]; then\n    set -- 7\nfi\n\nif [[ "$1" -gt 2 ]]; then\n    "$0" "$(($1 - 1))"\nelse\n    sleep 120\nfi\n
Run Code Online (Sandbox Code Playgroud)\n

或者更紧凑地,

\n
#!/bin/bash\n\n[[ "$#" -ne 1 ]] && set -- 7\n\n[[ $1 -gt 2 ]] && $0 $(($1 - 1)) || sleep 120\n
Run Code Online (Sandbox Code Playgroud)\n

如果没有给定参数或给出太多参数,它将其参数设置为 7。然后,只要其参数大于 2,它就会启动一个子进程运行相同的脚本,并使用递减的参数。当参数达到 2 时,它会运行两分钟的睡眠。(限制为两个,因为最后一个脚本和sleep也各算一个。)

\n
$ ./dummy &\n$ pstree -p 1800554\ndummy(1800554)\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80dummy(1800561)\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80dummy(1800563)\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80dummy(1800566)\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80dummy(1800567)\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80dummy(1800570)\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80sleep(1800572)\n
Run Code Online (Sandbox Code Playgroud)\n

您可以通过更改参数来请求不同数量的子级:

\n
$ ./dummy 6 &\n
Run Code Online (Sandbox Code Playgroud)\n

这可以扩展为在每个 \xe2\x80\x9c Generation\xe2\x80\x9d 中启动多个子项:

\n
#!/bin/bash\n\n[[ "$#" -ne 1 ]] && set -- 7\n\n[[ $1 -gt 2 ]] && $0 $(($1 - 1)) || sleep 120\n
Run Code Online (Sandbox Code Playgroud)\n

运行它作为

\n
./dummy 3 2 &\n
Run Code Online (Sandbox Code Playgroud)\n

开始两代人,每代人有三个孩子。

\n