如何编写一个 shell 脚本来打印进程的 PID、所有者和名称,并使用特殊变量 $$ 作为脚本的参数

如何编写一个 shell 脚本来打印进程的 PID、所有者和名称,并使用特殊变量 $$ 作为脚本的参数

脚本应显示命令pstree -hsup $$。我尝试过很多不同的方法,但找不到像这样打印输出的方法

28348 (bash,root)
28347 (su,root)
28346 (sudo,root)
14085 (bash,user)
14083 (lxterminal,user)
    1 (Systemd,root)

答案1

ps -o ppid将输出父进程的 pid。因此,从当前 pid 开始,然后询问父进程,然后询问其父进程,依此类推。

#! /bin/bash
pid=$1
while ((pid)) ; do
    ps -h -o 'pid,comm,euser' $pid \
        | sed -E 's/^( *[0-9]+ )([^ ]+) *([^ ]+)/\1(\2,\3)/'
    pid=$(ps -h -o ppid $pid)
done

您想要输出 pid、命令和有效用户(或者可能是真实用户?)。在中指定它们,-o并使用sed重新格式化输出。在这里,我们捕获三个非空格字符串并在需要的地方插入括号和逗号。

相关内容