我怎样才能杀死一个进程的名称,而不是PID?
例如,有时当我尝试启动Firefox时,表示Firefox进程已经在运行。 所以我必须这样做:
jeremy@jeremy-desktop:~$ ps aux | grep firefox jeremy 7451 25.0 27.4 170536 65680 ? Sl 22:39 1:18 /usr/lib/firefox-3.0.1/firefox jeremy 7578 0.0 0.3 3004 768 pts/0 S+ 22:44 0:00 grep firefox jeremy@jeremy-desktop:~$ kill 7451
我想要的是一个能为我做的一切的命令。 它会在进程列表中使用一个inputstring和grep(或其他),并且会终止输出中的所有进程:
jeremy@jeremy-desktop:~$ killbyname firefox
我尝试在PHP中执行它,但exec('ps aux')似乎只显示在PHP脚本中使用exec()执行的进程(所以它显示的唯一过程就是它自己)。
pkill firefox
更多信息: http : //linux.about.com/library/cmd/blcmdl1_pkill.htm
你可以使用killall <name>
来杀死进程
killall向运行任何指定命令的所有进程发送一个信号。 如果没有指定信号名称,则发送SIGTERM。
信号可以通过名称(例如-HUP或-SIGHUP )或数字(例如-1 )或选项-s来指定 。
如果命令名称不是正则expression式(选项-r )且包含斜线(/),则执行该特定文件的进程将被选中以进行查杀,而与其名称无关。
但是,如果你没有看到ps aux
的进程,你可能无权杀死它…
也可以使用:
pkill -f "Process name"
。
对我来说,它是完美的,这正是我所期待的。 在我的情况下,没有标志pkill没有与名称工作。
当设置-f
,完整的命令行用于模式匹配。
稍微长一点的select:
kill `pidof firefox`
在Mac上,我找不到pgrep,pkill也没有killall的工作,所以写了一个简单的单线程脚本: –
export pid=`ps | grep process_name | awk 'NR==1{print $1}' | cut -d' ' -f1`;kill $pid
如果有更简单的方法,请分享。
使用#killall
命令:
#killall -9 <processname>
最简单的方法是首先检查你是否得到正确的进程ID:
pgrep -f [part_of_a_command]
如果结果如预期。 去与:
pkill -f [part_of_a_command]
奇怪,但我还没有看到像这样的解决scheme:
kill -9 `pidof firefox`
它也可以杀死多个进程(多个pid),如:
kill -9 `pgrep firefox`
我更喜欢pidof
因为它具有单行输出:
> pgrep firefox 6316 6565 > pidof firefox 6565 6316
更正确的是:
export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid
我通常使用killall命令在这里看到的细节。
用grep杀死:
kill -9 `pgrep myprocess`
我问自己同样的问题,但目前的答案的问题是,他们不安全检查进程被杀死,所以…可能导致可怕的错误:)…特别是如果几个进程匹配模式 。
作为一个声明,我不是一个专业人士,这当然有改进的余地。
所以我写了一个sh脚本:
#!/bin/sh killables=$(ps aux | grep $1 | grep -v mykill | grep -v grep) if [ ! "${killables}" = "" ] then echo "You are going to kill some process:" echo "${killables}" else echo "No process with the pattern $1 found." return fi echo -n "Is it ok?(Y/N)" read input if [ "$input" = "Y" ] then for pid in $(echo "${killables}" | awk '{print $2}') do echo killing $pid "..." kill $pid echo $pid killed done fi
默认的kill
命令接受命令名称作为PID的替代。 见杀(1) 。 一个经常发生的麻烦是bash
提供了自己的kill
,它接受作业号,比如kill %1
,但不包括命令名。 这阻碍了默认命令。 如果前者的function比后者更有用,则可以通过调用禁用bash
版本
enable -n kill
有关更多信息,请参阅bash(1)中的 kill
和enable
条目。
如果您运行GNOME,则可以像使用Windows一样使用系统监视器(系统 – >pipe理 – >系统监视器)来终止进程。 KDE会有类似的东西。
杀死所有启动path中有snippet
进程。 你可以杀死所有从某个目录开始的应用程序,把/ directory /作为一个片段。 从同一个应用程序目录中为同一个应用程序启动多个组件时,这非常有用。
ps ax | grep <snippet> | grep -v grep | awk '{print $1}' | xargs kill
ps aux | grep processname | cut -d' ' -f7 | xargs kill -9 $
kill -9 $(ps aux | grep -e myprocessname | awk'{print $ 2}')