使用shell脚本查看linux所有进程之间的结构

本文介绍了一个Shell脚本,该脚本用于搜索并显示进程及其子进程的信息。通过递归调用函数来查找指定进程ID的所有子进程,并展示了如何在Shell脚本中进行算术运算、逻辑判断等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shell代码

count=0
searchid()
{
    count=$(($count+1))
    [ $# -eq 0 ] && return
    awk -v ppid=$1 '{
        if($1==ppid)
        {printf"%s %s %s\n",$2,$3,$4;}
    }' all | while read nppid a b
    do
        tmpnum=0
        while [ $tmpnum -lt  $count ]
        do
            echo -n " "
            tmpnum=$(($tmpnum+1))
        done
        echo $nppid " " $a " " $b
        searchid $nppid
        count=$(($count-1))
    done


}

ps -Ao ppid,pid,user,cmd | awk '/^ *[0-9]+.*$/{if($1!=$2){printf"%s %s %s %s\n",$1,$2,$3,$4;}}' > all
searchid 0

相关知识点

下面简单描述一下这个脚本中的相关知识点
1:在shell中进行算术运算。

sum=$((1+2))
echo sum # 输出3
sum=$(($sum+3))
echo sum # 输出6

2:在shell中进行逻辑判断。

a=11
b=22
[ $a -lt $b ] # 返回0,表示真。
echo $? # 输出0

3:&&和||的短路原理。
$$中的第一个表达式为真,那么一定会执行第二个表达式;如果第一个表达式为假,那么就不会再执行第二个表达式。
||正好相反。

a=10
b=20
if [ a -lt b ]
then
    echo 'a<b'
else
    echo 'a>b'
fi
# 输出‘a<b’
a=30
[ $a -lt $b ] && echo 'a<b' || echo 'a>b' #逻辑与上面的if语句相同。输出‘a>b’

4:向awk中传入变量。

var=123
echo | awk -v num=$var '{print num}' # 输出123
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值