命令行:
ps -o ppid= -p 1111
ppid () { ps -p ${1:-$$} -o ppid=; }
功能:
alias ppid='ps -o ppid= -p'
别名(函数为优选):
#!/bin/sh
pid=$1
if [-z $pid]
then
read -p "PID: " pid
fi
ps -p ${pid:-$$} -o ppid=
脚本:
&001
如果没有提供PID给函数或脚本,则默认显示当前进程的PPID。
这是我学过的东西之一,忘了,再学,再学,再重复。但它很有用。pstree命令的’s'标志显示了一棵树的叶子在N处:
pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
父pid在shell变量PPID中,所以
echo $PPID
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
tmux
一个稍微复杂一点的例子,检查启动当前进程的父进程的命令。
在top
运行时,按f键,会在-u username and -p PID
的输出中显示一个你想显示的选项列表,显示的参数用大写字母显示,不显示的参数用小写字母显示。对于父进程ID,你需要输入b,然后按回车键,就会在顶部输出中显示PPID。
这里有一个快速的解决方案,应该也可以使用:
ps $$
当我想找到 “一个pid的所有父进程 "时,我来到了这里。我最后做了一个自己的递归函数来做。
#!/bin/bash -eu
main(){
ps -p ${1:-$$} -h -o pid,ppid,args | \
(
read pid ppid args
echo -e "$pid\t$args"
[[$pid -gt 1]] && main $ppid
)
}
main "$@"