下面是一个参考的Shell脚本程序,可以输出指定进程的进程层次结构:
#!/bin/bash
# get the pid of the specified process
if [ "$1" == "" ]; then
echo "Usage: $0 "
exit
fi
TARGET_PID="$1"
# function to get the parent pid of the specified pid
function get_parent_pid() {
local pid="$1"
# get the parent pid of the specified pid
local ppid=`ps -o ppid= -p $pid`
# if no parent pid is found, set parent pid to 0
if [ "$ppid" == "" ]; then
ppid=0
fi
echo $ppid
}
# print the process hierarchy
echo "process hierarchy of PID $TARGET_PID:"
while [ "$TARGET_PID" != "1" ]; do
# get the name of the specified pid
NAME=`ps -o comm= -p $TARGET_PID`
# output the pid and name of the specified pid
echo " PID $TARGET_PID ($NAME)"
# get the parent pid of the specified pid
TARGET_PID=`get_parent_pid $TARGET_PID`
done
echo " PID 1 (systemd)"
以上Shell脚本程序使用ps命令获取指定进程ID(pid)的父进程ID(ppid),并依次向上查找父进程直到PID为1为止,输出进程层次结构。如果运行以上程序时没有指定指定进程ID,则使用说明将被输出。