您好,我搜索了各种论坛,在这里,我可以找到一些针对 Linux 和 Mac 的答案,但无法找到针对 Unix,特别是 Korn Shell 的解决方案。
如何从进程id(pid)获取进程名(命令名)
我尝试了以下命令
ps -eaf | awk '{ print substr($0, index($0, $9)) }'
上面的命令在给出 TIME 而不是月份和日期时失败(因为在这种情况下,字符串中只有 8 列)
任何建议都会有所帮助。
pgrep
$ pgrep bluetoothd
441
否则,您可以使用
awk
:
ps -ef | awk '$8=="name_of_process" {print $2}'
例如,如果
ps -ef
有一行类似:
root 441 1 0 10:02 ? 00:00:00 /usr/sbin/bluetoothd
然后
ps -ef | awk '$8=="/usr/sbin/bluetoothd" {print $2}'
返回 441
。
在 ksh 中未找到 pgrep。另一个解决方案失败了 下面是 ps 命令 jaggsmca325 7550 4752 0 Sep 11 pts/44 的输出 0:00 sqlplus dummy_user/dummy_password@dummy_schema
让我们检查最后一列 (
$NF
),无论其编号如何:
$ ps -ef | awk '$NF=="/usr/sbin/bluetoothd" {print $2}'
441
如果你想匹配不精确的字符串,你可以使用
~
代替:
$ ps -ef | awk '$NF~"bluetooth" {print $2}'
441
1906
如果您的
ps | awk
解决方案因 ps
的输出不是您想要的而失败,那么请这样做:
ps -eaf -o pid,cmd | awk '/regex-to-match-command-name/{ print $1 }'
ps -C <the-name> -o etime=
我的 ps 来自 procps-ng 。