Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 如何在给定进程名称的情况下获取pid_Unix_Ksh_Pid_Ps - Fatal编程技术网

Unix 如何在给定进程名称的情况下获取pid

Unix 如何在给定进程名称的情况下获取pid,unix,ksh,pid,ps,Unix,Ksh,Pid,Ps,您好,我搜索了各种论坛,在这里,我也可以找到一些关于Linux和Mac的答案,但无法找到Unix和Korn Shell的解决方案 如何从进程id(pid)获取进程名(命令名) 下面是我从SO找到的参考资料 我试着服从命令 ps -eaf | awk '{ print substr($0, index($0, $9)) }' 上述命令在给定时间而不是月份和日期时失败(因为在本例中,字符串中只有8列) 任何建议都会有帮助。我认为它更容易使用 否则,您可以使用awk: ps -ef | awk '

您好,我搜索了各种论坛,在这里,我也可以找到一些关于Linux和Mac的答案,但无法找到Unix和Korn Shell的解决方案

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

下面是我从SO找到的参考资料

我试着服从命令

ps -eaf | awk '{ print substr($0, index($0, $9)) }'
上述命令在给定时间而不是月份和日期时失败(因为在本例中,字符串中只有8列)


任何建议都会有帮助。

我认为它更容易使用

否则,您可以使用
awk

ps -ef | awk '$8=="name_of_process" {print $2}'
例如,如果
ps-ef
有一条类似以下的线:

root       441     1  0 10:02 ?        00:00:00 /usr/sbin/bluetoothd
然后返回
441



在ksh中找不到pgrep。另一个解决方案是以防万一失败 以下是ps命令JAGGSMCA325755047520SEP11 pts/44的输出 0:00 sqlplus虚拟用户/虚拟用户_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 }'
您可以使用获取名为
p\u name
的正在运行进程的所有ID:

p|u name | tr''\n'
(用于垂直列表)

p\u name
-终止所有名为
p\u name

确保你有权限杀死他们:)

ps-C-o etime=

我的ps来自procps ng。

不,我想从进程名中获取pid,标题中的输入错误。此问题非常特定于您的unix版本,与shell几乎没有关系。请包括
uname-a
的输出。对于碰巧发现这一点的Mac用户,另请参阅。它说ps:Inlable option--o
ps
根据您的平台而有所不同(但我认为
-o
是标准的)。查看文档以了解如何操作输出字段。(
man ps
ps
还支持
o
(无
-
)和
--格式,具体取决于您的平台。在ksh中找不到pgrep。另一个解决方案在以下情况下失败,即从ps命令输出
jaggsmca325 7550 4752 0 Sep 11 pts/44 0:00 sqlplus dummy_user/dummy_password@dummy_schema
我尝试了您的解决方案,该解决方案非常有效,但在进程名称下面有空格时失败了,如ps-eaf | awk'$NF==“社会保障署:jaggsmca325@pts/53“{print$2}”有任何指向该问题的指针吗?是的,我想得到匹配的确切进程名称。@gahlot.jaggs当我使用
$NF
时,您也可以使用
$(NF-1)
等。因此您可以使用
$(NF-1)=“sshd:&$NF=”jaggsmca325@pts/53“
感谢您的所有努力,但我不知道在运行时我将拥有多少令牌,因此我不能使用$(NF-1),否则它将仅修复为N-1,并且在其他情况下将失败。是否有任何方法可以通过使用进程名称而不是使用ps来查找进程id-eaf@gahlot.jaggs您还可以
grep“process$”
,因为
$
表示行尾。然后将字符串给awk以打印第二条记录。我还使用
ps-C-o user=|head-1
来获取进程所有者(用户)对超过15个字符的进程名称的pidof works
ps -eaf -o pid,cmd | awk '/regex-to-match-command-name/{ print $1 }'
ps -C <the-name> -o etime=