unix 如何通过指定进程名来获取进程的PID并将其存储在变量中以供进一步使用?

sg2wtvxw  于 2023-04-11  发布在  Unix
关注(0)|答案(6)|浏览(241)

通过使用“ucbps”命令,我能够获得所有PID

$ ucbps

   Userid     PID     CPU %  Mem %  FD Used   Server                  Port
   =========================================================================

   512        5783    2.50   16.30  350       managed1_adrrtwls02     61001
   512        8896    2.70   21.10  393       admin_adrrtwls02        61000
   512        9053    2.70   17.10  351       managed2_adrrtwls02     61002

我想这样做,但不知道怎么做

  1. variable=通过进程名获取进程的pid。
    1.然后使用这个命令kill -9变量。
xxhby3vn

xxhby3vn1#

如果你想基于一个字符串杀死-9(你可能想先尝试kill),你可以这样做:

ps axf | grep <process name> | grep -v grep | awk '{print "kill -9 " $1}'

这将显示您将要杀死的内容(非常非常重要),并在执行时将其通过管道传输到sh

ps axf | grep <process name> | grep -v grep | awk '{print "kill -9 " $1}' | sh
bakd9h0s

bakd9h0s2#

pids=$(pgrep <name>)

将获取具有给定名称的所有进程的pid。要杀死所有进程,请使用

kill -9 $pids

避免使用变量并直接终止具有给定名称的所有进程的问题

pkill -9 <name>
kse8i1jr

kse8i1jr3#

在一条线上…

pgrep -f process_name | xargs kill -9
vwhgwdsa

vwhgwdsa4#

另一种可能性是使用pidof,它通常与大多数发行版一起提供。它将通过使用其名称返回给定进程的PID。

pidof process_name

通过这种方式,您可以将该信息存储在一个变量中并对其执行kill -9

#!/bin/bash
pid=`pidof process_name`
kill -9 $pid
rqqzpn5f

rqqzpn5f5#

使用grep [n]ame删除grep -v名称,这是第一个... Sec使用xargs的方式是如何在那里是错误的rnu无论它是管道,你必须使用-i(交互模式),否则你可能会有问题的命令。
PS axf|grep|grep -v grep|awk '{print“kill -9“$1}'?ps aux|grep [n]ame|#21040;,“那不是更好吗?”

slwdgvem

slwdgvem6#

解决方案(完全匹配进程名)

pgrep -x <process_name> | xargs kill -9

(顺便说一句,对于这个特定的用例,还不如做pkill -9 -x <process_name>,但问题是一般如何获取PID)

详情

接受的答案(以及所有其他答案)的问题是,没有-xpgrep(或手动ps | grep,或出于某种原因,pidof)将匹配<process_name>项是 * 子字符串 * 的进程。
例如,pgrep installd匹配,现在在我的机器(macOS 13.0 22A380 arm64)上:

❯ pgrep -l installd
316 uninstalld
33158 system_installd
33160 installd

显然我只想要33160,而不是其他的。
由于某种原因,pidof也有同样的问题:

❯ pidof installd
316 33158 33160

pregp -x是唯一可行的解决方案(我想,除了用ps | grep解决方案来处理正则表达式之外)

❯ pgrep -xl installd
33160 installd

相关问题