如何从 ps 输出中获取进程文件名(未截断)?

问题描述 投票:0回答:1

我希望脚本能够检查给定进程是否正在运行,并获取其进程 ID (PID),因此我正在查看 ps 进程输出。

如果我使用

cmd
选项执行输出,似乎我获得了可执行文件及其命令行参数的路径:

[user@server ~]$  ps -o pid,cmd -A | grep gnome
1514 /usr/libexec/gnome-session-binary --autostart /usr/share/gdm/greeter/autostart

如果我使用

comm
选项执行输出,我将得到一个截断的进程名称:

[user@server ~]$  ps -o pid,comm -A | grep gnome
1514 gnome-session-b

所以它是“gnome-session-b”而不是“gnome-session-binary”。

我只想要 PID 和(未截断的)进程文件名,因此

cmd
选项似乎是更好的选择。但是,如果我查看
nginx
,它会在输出中包含一些额外信息:

[user@server ~]$  ps -o pid,cmd -A | grep nginx
25147 nginx: master process nginx -c /opt/nginx/nginx.conf
25148 nginx: worker process

[user@server ~]$  ps -o pid,comm -A | grep nginx
25147 nginx
25148 nginx

总的来说:

-o <option(s)>
,我想获得所请求的信息,并且(没有任何额外的)。

目标是:进程 ID (PID) 和(完整,未截断)进程文件名。

看起来选择是

cmd
将获得完整的进程名称,但也会给出命令行参数,并且还将告知它是“主进程”还是“工作进程”。我想消除输出中的额外噪音。

或者选择是

comm
,它将(仅)给出进程名称,但它必须是一个简短的进程名称,否则它会被截断。 nginx 巧合的是足够短,但其他进程文件名可能会更长。

ps 输出还有其他选项吗?

“主进程”或“工作进程”的额外信息是什么?我在 ps 手册页中没有注意到任何内容。

linux sh
1个回答
0
投票

您正在寻找

ps -o pid,command


来自

man
页面:

© www.soinside.com 2019 - 2024. All rights reserved.