有时当我尝试启动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
我想要的是一个可以为我做这一切的命令。它会在进程列表中为它(或其他)输入一个输入字符串grep
,并会终止输出中的所有进程:
jeremy@jeremy-desktop:~$ killbyname firefox
我尝试在PHP中执行此操作,但exec('ps aux')
似乎只显示在PHP脚本本身中使用exec()
执行的进程(因此它显示的唯一进程本身就是。)
答案 0 :(得分:445)
pkill firefox
答案 1 :(得分:84)
也可以使用:
pkill -f "Process name"
。
对我而言,它完美无缺,这正是我所寻求的。 在没有标志的情况下,pkill没有使用名称。
设置-f
时,完整的命令行用于模式匹配。
答案 2 :(得分:61)
您可以使用killall <name>
killall 向所有人发送信号 运行任何指定的进程 命令。如果没有信号名称 指定,SIGTERM被发送。
可以通过指定信号 姓名(例如 -HUP 或 -SIGHUP )或按号码(例如 -1 )或选项 -s 。
如果命令名称不规则 表达式(选项 -r )并包含一个 斜杠(/),执行它的进程 将选择特定文件 杀人,与他们的名字无关。
但是如果你没有看到ps aux
的过程,你可能没有权利杀死它......
答案 3 :(得分:40)
更长的选择:
kill `pidof firefox`
答案 4 :(得分:16)
最简单的方法是首先检查您是否获得了正确的进程ID:
pgrep -f [part_of_a_command]
如果结果符合预期。跟着:
pkill -f [part_of_a_command]
答案 5 :(得分:14)
奇怪,但我还没有看到这样的解决方案:
kill -9 `pidof firefox`
它还可以杀死多个进程(多个pid),如:
kill -9 `pgrep firefox`
我更喜欢pidof
,因为它有单行输出:
> pgrep firefox
6316
6565
> pidof firefox
6565 6316
答案 6 :(得分:10)
在Mac上我找不到pgrep和pkill也没有killall工作所以写了一个简单的一个班轮脚本: -
export pid=`ps | grep process_name | awk 'NR==1{print $1}' | cut -d' ' -f1`;kill $pid
如果有更简单的方法,请分享。
答案 7 :(得分:8)
使用#killall
命令:
#killall -9 <processname>
答案 8 :(得分:7)
杀死启动路径中snippet
的所有进程。您可以将/ directory /作为一个片段来杀死从某个目录启动的所有应用。当您从同一个应用程序目录启动同一应用程序的多个组件时,这非常有用。
ps ax | grep <snippet> | grep -v grep | awk '{print $1}' | xargs kill
*如果可以的话,我会提供pgrep
答案 9 :(得分:5)
用grep杀死:
kill -9 `pgrep myprocess`
答案 10 :(得分:4)
更正确的是:
export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid
答案 11 :(得分:3)
我通常使用killall命令see here来获取详细信息。
答案 12 :(得分:2)
我问自己同样的问题,但目前答案的问题是他们没有安全检查要杀死的程序所以......这可能会导致可怕的错误: )...尤其是多个进程匹配模式。
作为免责声明,我不是专业人士,而且肯定有改进的余地。
所以我写了一个小脚本:
#!/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
答案 13 :(得分:1)
默认kill
命令接受命令名作为PID的替代。见kill (1)。经常出现的问题是bash
提供了自己的kill
,它接受作业编号,如kill %1
,但不接受命令名称。这会阻碍默认命令。如果前者功能对后者比后者更有用,则可以通过调用
bash
版本
enable -n kill
有关详细信息,请参阅bash (1)中的kill
和enable
条目。
答案 14 :(得分:0)
如果您运行GNOME,您可以使用系统监视器(System-&gt; Administration-&gt; System Monitor)来杀死进程,就像在Windows下一样。 KDE会有类似的东西。
答案 15 :(得分:0)
awk oneliner,它解析ps
输出的标头,因此您无需关心列号(但列名)。支持正则表达式。例如,要杀死所有进程,其可执行文件名称(无路径)包含单词“ firefox”,请尝试
ps -fe | awk 'NR==1{for (i=1; i<=NF; i++) {if ($i=="COMMAND") Ncmd=i; else if ($i=="PID") Npid=i} if (!Ncmd || !Npid) {print "wrong or no header" > "/dev/stderr"; exit} }$Ncmd~"/"name"$"{print "killing "$Ncmd" with PID " $Npid; system("kill "$Npid)}' name=.*firefox.*
答案 16 :(得分:-1)
ps aux | grep processname | cut -d' ' -f7 | xargs kill -9 $
答案 17 :(得分:-1)
kill -9 $(ps aux | grep -e myprocessname | awk'{print $ 2}')