查找进程的ID并杀死它


16

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

它打印这样的事情1766 ? 00:00:13 conky,然后我使用进程ID,以kill它喜欢这样kill 1766

有什么办法可以简化吗?使其更快?减少打字量?


1
我已经得到了想要的答案,但是我要等待一段时间才能接受,以便社区可以从各种可用的选项中受益。
Gautam

如果可以的话,请随时让这个问题更笼统,以便更多的人可以从答案中受益
Gautam

Answers:


19

(TL,DR: ,)pgreppkill

Unix的各种变种来与pgrep和它的同伴pkill的SolarisLinux的(部分标准流程公用事业,可能是从嵌入式Linux系统所缺乏的),FreeBSD的OpenBSD系统NetBSD的,......但只从OS X的MacPorts不是AIX,以及只有最近在HP-UX中。该pgrep实用程序显示按名称,用户和其他一些条件匹配的进程的进程ID。参数to pgrep被解释为一个正则表达式,必须与该进程的可执行文件名称的一部分匹配(除非您传递一个选项来更改此名称)。如果您致电pkill而不是pgrep,该实用程序会发送信号,而不显示进程ID。

另一个类似的实用程序是pidof。在Linux上,它是由SysVinitBusyBox提供的(因此您经常会在没有的嵌入式Linux系统上找到它pgrep);其他unix变体上也有端口。该pidof实用程序具有较少的选项,它几乎只匹配整个可执行文件的名称。它的配套实用程序killall向匹配的程序¹ 发送信号。

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


哇,您的答案很详细,更深入,谢谢。如果可能,请编辑问题以匹配答案。
Gautam

@GautamK我认为问题不需要扩大。如果这样做,请随时自行编辑。
吉尔(Gilles)“所以,别再邪恶了”,

在投票数最多的答案中,您的答案提供了更多详细信息,所以我接受它
Gautam

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

第二个pidof似乎更容易一些,但仍然需要2个步骤
Gautam

我可以搜索/创建一个单行命令,该命令可以一步完成(具有粗略的进程名称),但是这将要求您键入长行(比上面的两个步骤更难),或者可以键入一次并重用它形成历史。
Hanan N.

@GautamK我已经用单个命令选项更新了答案。
Hanan N.

6

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

PS Hanan pidof可以通过kill反引号直接喂入:

kill `pidof processname`

pkill正是我一直在寻找的东西,我大多数时候都知道流程名称,主要是它的conkyfirefoxchrome类似名称。谢谢
Gautam

1

这个怎么样 -

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

更新:

对不起,这显然不能满足少打字的要求,这样做的一个很好的方式将是一个添加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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.