有时当我试图启动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()执行的进程(所以它显示的唯一进程是本身)。


当前回答

kill -9 $(ps aux | grep -e myprocessname| awk '{ print $2 }')

其他回答

我也问过自己同样的问题,但目前答案的问题是,它们不安全检查要被杀死的进程,所以……这可能会导致可怕的错误:)…特别是当多个过程与模式匹配时。

作为一个免责声明,我不是一个sh专业人士,当然有改进的空间。

所以我写了一个小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

如果您运行GNOME,您可以使用系统监视器(system ->Administration-> system monitor)像在Windows下一样杀死进程。KDE也有类似的东西。

一个长一点的替代词:

kill `pidof firefox`

我通常使用killall命令。

有关该命令的详细信息,请查看此链接。

更正确的说法是:

export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid