编写一个脚本,以 PID 作为参数并打印其所有孙子代和孙孙代的 PID

编写一个脚本,以 PID 作为参数并打印其所有孙子代和孙孙代的 PID

您好,我正在尝试编写一个脚本,该脚本接受 PID 的参数,并打印该 PID 的所有孙子和曾孙,而不是子项。例如:

$ printthem 3545
3546
3548
3666

我尝试做的是:

ps --ppid $1

但它没有给我 ID。另外,我读过一些关于 pstree 的文章,但我不太清楚如何正确使用它来实现我的目标。任何指导都将不胜感激。谢谢!

答案1

这是元语言设计(未实施,未测试,必须假定不起作用)。实际编码留给学生作为练习。

bash脚本中(以 开头#!/bin/bash):

定义一个ppid函数,以 PID 作为参数,并返回 PID 的父级。

定义一个children函数,以 PID 为参数,并返回以空格分隔的列表(“ pid pid pid”注意尾随空格),其中列出以参数 PID 为父级的 PID。使用该函数检查系统上的所有 PID ppid

startPID=$1
childlist="$(children $startPID)"
gchildlist=""
ggchildlist=""
for kid in $childlist ; do
    gchildlist="$gchildlist $(children $kid)"
done
for kid in $gchildlist ; do
    ggchildlist="$ggchildlist $(children $kid)"
done
echo "Grand :  $gchildlist"
echo "Ggrand: $ggchildlist"

相关内容