我想获取系统中除ps进程本身之外的所有进程的信息。
也就是说,类似:
ps --no-headers --pid 1111 -N
Run Code Online (Sandbox Code Playgroud)
其中是当前正在运行的命令1111的进程 ID 。ps
我尝试过类似的东西
ps --no-headers --ppid $$ -N
Run Code Online (Sandbox Code Playgroud)
但是,当在“子进程”中运行时,这不起作用,例如:ps
ps --no-headers --pid 1111 -N
Run Code Online (Sandbox Code Playgroud)
最后一个命令尝试获取“最近”使用最多 CPU 的进程的 CPU 使用百分比和进程 ID 以及名称。
IFS=' ' read pctd proc <<<$(/bin/ps --no-headers -eo pcpu,pid,comm --sort=+pcpu | tail -1)
Run Code Online (Sandbox Code Playgroud)
直到最近都工作正常。然而,更新到 Ubuntu 23.04(或内核 6.x)后,有时ps会开始将自己列为使用 100% CPU。
目前,以下似乎是一种解决方法(但并不安全):
IFS=' ' read pctd proc <<<$(/bin/ps --no-headers -eo pcpu,pid,comm --sort=+pcpu | grep -v \ ps | tail -1)
Run Code Online (Sandbox Code Playgroud)
Kam*_*ski 13
排除ps自身:
sh -c 'exec ps --no-headers --pid "$$" -N'
Run Code Online (Sandbox Code Playgroud)
sh将其自己的 PID 替换为$$,但随后将其自身替换为ps。PID不改变,这就是exec工作原理。这种方式ps接收它自己的 PID 作为 的选项参数--pid。
请注意,此方法排除自身 ps,但不排除其他ps进程(如果有)。