查找进程的ID并杀死它

查找进程的ID并杀死它

每当我需要终止后台进程时,我都会这样做ps -e | grep <process_name>

它打印出类似这样的内容,然后我像这样1766 ? 00:00:13 conky使用进程 ID 。killkill 1766

有什么办法可以简化这个吗?让它更快一点?减少打字量?

答案1

(TL,DR pgrep:,pkill

许多 UNIX 变体都带有pgrep及其同伴pkill索拉里斯,Linux(的一部分标准流程实用程序,嵌入式 Linux 系统中可能不存在),自由BSD,开放BSD,网络BSD, … 但只能从 OS X 上的 MacPorts,不是 AIX, 和最近才在 HP-UX 中。该pgrep实用程序显示与名称、用户和其他一些条件匹配的进程的进程 ID。的参数pgrep被解释为一个正则表达式,它必须与进程的可执行文件名称的一部分匹配(除非您传递一个选项来更改它)。如果您调用pkill而不是pgrep,实用程序会发送信号而不是显示进程 ID。

另一个类似的实用程序是皮多夫。在Linux,它由系统初始化或者忙碌盒(因此您经常会在没有 的嵌入式 Linux 系统上找到它pgrep);还有其他 UNIX 变体上的端口。该pidof实用程序的选项较少,它大多只匹配整个可执行文件名。它的配套实用程序killall向匹配的程序发送信号。

¹ 请注意,它killall在 Solaris 和其他可能的 UNIX 变体上具有不同的含义;不要killall在 Solaris 上以 root 身份键入。

答案2

  • killall ProcessName(此命令的一个缺点是您并不总是知道程序的进程名称)。
  • pidof ProccessNamekill the result form pidof
  • ps xu | grep <process name> | grep -v grep | awk '{ print $2 }' | xargs kill -9尝试这一行并在 bash 历史记录中重复使用它,或者更好地为其创建一个别名。

答案3

虽然 Hanan 有一些好的建议,但我会添加pgrep/ pkill。它们可以更好地控制您找到的进程,如果您不知道需要杀死的确切进程,则可以使用正则表达式。

PS Hananpidof可以kill直接用反引号输入:

kill `pidof processname`

答案4

这个怎么样 -

ps -e | awk '$4~/<process name>/{print $1}' | xargs kill

例子:

[jaypal:~/Temp] sleep 100&
[1] 74863
[jaypal:~/Temp] ps -e | awk '$4~/sleep/{print $1}' | xargs kill
[1]+  Terminated: 15          sleep 100

更新:

抱歉,这显然不满足减少输入的要求,因此一个好的方法是将 a 添加function到您的.bashrc.profile任何启动脚本中。该函数可以是这样的 -

killp() {
awk -v pname="$1" '($4==pname){print $1}' <(ps -e) | xargs kill
}

添加后,您只需传递进程名称即可:

[jaypal:~] sleep 100&
[1] 77212
[jaypal:~] killp sleep
[1]+  Terminated: 15          sleep 100

相关内容