每当我需要终止后台进程时,我都会这样做ps -e | grep <process_name>
它打印出类似这样的内容,然后我像这样1766 ? 00:00:13 conky
使用进程 ID 。kill
kill 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 ProccessName
和kill 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