如何根据进程名称获取pid

gah*_*ggs 43 unix ksh pid ps

嗨我已经搜索了各种论坛,在这里,我可以找到Linux和Mac的一些答案,但无法找到Unix和特别是Korn Shell的解决方案.

如何从进程ID(pid)获取进程名称(命令名称)

下面引用我从SO发现 这一个 而这其中也

我试过下面的命令

ps -eaf | awk '{ print substr($0, index($0, $9)) }'
Run Code Online (Sandbox Code Playgroud)

上面的命令在给定TIME而不是Month和Date的位置失败(因为在这种情况下,字符串中只有8列)

任何建议都会有所帮助.

fed*_*qui 73

我觉得它更容易使用 pgrep

$ pgrep bluetoothd
441
Run Code Online (Sandbox Code Playgroud)

否则,您可以使用awk:

ps -ef | awk '$8=="name_of_process" {print $2}'
Run Code Online (Sandbox Code Playgroud)

例如,如果ps -ef有一行如下:

root       441     1  0 10:02 ?        00:00:00 /usr/sbin/bluetoothd
Run Code Online (Sandbox Code Playgroud)

然后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
Run Code Online (Sandbox Code Playgroud)

如果您想匹配不完全匹配的字符串,您可以使用~:

$ ps -ef | awk '$NF~"bluetooth" {print $2}'
441
1906
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以使用pidof来获取正在运行的进程的所有ID的名称(对于垂直上市)杀死蒙山名称的所有进程NB确保你必须杀死他们:)权限p_name
pidof p_name | tr ' ' '\n'
pkill p_namep_name