我正在尝试编写一个 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 个后代进程来启动和测试我的脚本。
要启动具有七个后代的脚本,您可以使用如下内容:
\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\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n如果没有给定参数或给出太多参数,它将其参数设置为 7。然后,只要其参数大于 2,它就会启动一个子进程运行相同的脚本,并使用递减的参数。当参数达到 2 时,它会运行两分钟的睡眠。(限制为两个,因为最后一个脚本和sleep也各算一个。)
$ ./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)\nRun Code Online (Sandbox Code Playgroud)\n您可以通过更改参数来请求不同数量的子级:
\n$ ./dummy 6 &\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n运行它作为
\n./dummy 3 2 &\nRun Code Online (Sandbox Code Playgroud)\n开始两代人,每代人有三个孩子。
\n| 归档时间: |
|
| 查看次数: |
984 次 |
| 最近记录: |