说明:本shell题目是一个网友在公众号中提问的,正好利用这个每日习题的机会拿出来让大家一起做一做。
给出一个进程PID,打印出该进程下面的子进程以及子进程下面的所有子进程。(只需要考虑子进程的子进程,再往深层次则不考虑)
参考答案:
#!/bin/bash
read -p "please input a pid number: " p
ps -elf > /tmp/ps.log
is_ppid(){
awk '{print $5}' /tmp/ps.log > /tmp/ps1.log
if ! grep -qw "$1" /tmp/ps1.log
then
echo "PID $1 不是系统进程号,或者它不是父进程"
return 1
fi
}
is_ppid $p
if [ $? -eq "1" ]
then
exit
fi
print_cpid(){
p=$1
awk -v p1=$p '$5 == p1 {print $4}' /tmp/ps.log |sort -n |uniq >/tmp/p1.log
n=`wc -l /tmp/p1.log|awk '{print $1}'`
if [ $n -ne 0 ]
then
echo "PID $p 子进程 pid 如下:"
cat /tmp/p1.log
else
echo "PID $p 没有子进程"
fi
}
print_cpid $p
for cp in `cat /tmp/p1.log`
do
print_cpid $cp
done
另外,一条命令查询的方法是:pstree -p pid
shell习题-获取子进程
2017年10月16日
shell习题
No Comments
aming
说明:本shell题目是一个网友在公众号中提问的,正好利用这个每日习题的机会拿出来让大家一起做一做。
给出一个进程PID,打印出该进程下面的子进程以及子进程下面的所有子进程。(只需要考虑子进程的子进程,再往深层次则不考虑)
参考答案: