Answers:
(TL,DR: ,)pgrep
pkill
Unix的各种变种来与pgrep
和它的同伴pkill
:的Solaris,Linux的(部分标准流程公用事业,可能是从嵌入式Linux系统所缺乏的),FreeBSD的,OpenBSD系统,NetBSD的,......但只从OS X的MacPorts,不是AIX,以及只有最近在HP-UX中。该pgrep
实用程序显示按名称,用户和其他一些条件匹配的进程的进程ID。参数to pgrep
被解释为一个正则表达式,必须与该进程的可执行文件名称的一部分匹配(除非您传递一个选项来更改此名称)。如果您致电pkill
而不是pgrep
,该实用程序会发送信号,而不显示进程ID。
另一个类似的实用程序是pidof。在Linux上,它是由SysVinit或BusyBox提供的(因此您经常会在没有的嵌入式Linux系统上找到它pgrep
);其他unix变体上也有端口。该pidof
实用程序具有较少的选项,它几乎只匹配整个可执行文件的名称。它的配套实用程序killall
向匹配的程序¹ 发送信号。
¹
注意killall
在Solaris和可能的其他Unix变体中具有不同的含义;不要killall
在Solaris上以root身份键入。
killall ProcessName
(此命令的缺点是,您并不总是知道程序的进程名称)。pidof ProccessName
和 kill the result form pidof
ps xu | grep <process name> | grep -v grep | awk '{ print $2 }' | xargs kill -9
尝试这一行并重用它可形成bash的历史记录,或者更好地为其创建别名。pidof
似乎更容易一些,但仍然需要2个步骤
这个怎么样 -
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