444

有时当我尝试启动 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')似乎只显示exec()在 PHP 脚本本身中执行的进程(因此它显示的唯一进程就是它本身。)

4

18 回答 18

639
pkill firefox

更多信息: http: //linux.about.com/library/cmd/blcmdl1_pkill.htm

于 2008-10-02T04:58:24.173 回答
182

也可以使用:

pkill -f "Process name"

对我来说,它完美无缺。这是我一直在寻找的。pkill 不适用于没有标志的名称。

设置时-f,完整的命令行用于模式匹配。

于 2015-01-07T13:49:08.170 回答
69

您可以按名称杀死进程killall <name>

killall向运行任何指定命令的所有进程发送信号。如果未指定信号名称,则发送 SIGTERM。

信号可以通过名称(例如-HUP-SIGHUP)或数字(例如 -1)或选项-s来指定。

如果命令名称不是正则表达式(选项-r)并且包含斜杠 (/),则执行该特定文件的进程将被选择用于终止,与它们的名称无关。

但是,如果您没有看到带有 的进程ps aux,则您可能无权杀死它...

于 2008-10-02T05:05:29.320 回答
53

更长的选择:

kill `pidof firefox`
于 2008-10-02T16:32:57.703 回答
38

最简单的方法是首先检查您是否获得了正确的进程 ID:

pgrep -f [part_of_a_command]

如果结果符合预期。一起去:

pkill -f [part_of_a_command]
于 2016-07-12T19:53:06.047 回答
26

奇怪,但我还没有看到这样的解决方案:

kill -9 `pidof firefox`

它还可以杀死多个进程(多个 pid),例如:

kill -9 `pgrep firefox`

我更喜欢pidof它,因为它有单行输出:

> pgrep firefox
6316
6565
> pidof firefox
6565 6316
于 2016-10-02T20:17:44.867 回答
25

杀死所有snippet在启动路径中的进程。您可以通过将 /directory/ 作为片段来终止从某个目录启动的所有应用程序。当您从同一个应用程序目录为同一个应用程序启动多个组件时,这非常有用。

ps ax | grep <snippet> | grep -v grep | awk '{print $1}' | xargs kill

* 如果有的话,我会更喜欢 pgrep

于 2017-04-05T13:03:46.023 回答
14

使用killall命令:

killall processname

使用-9or-KILL强制终止程序(选项与kill命令类似)。

于 2013-05-18T07:27:34.687 回答
12

在 Mac 上,我找不到 pgrep 和 pkill,killall 也没有工作,所以写了一个简单的衬里脚本:-

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

如果有更简单的方法,请分享。

于 2013-02-21T23:32:58.070 回答
7

用 grep 杀死:

kill -9 `pgrep myprocess`
于 2014-11-14T20:14:41.647 回答
5

我通常使用killall命令。

检查此链接以获取此命令的详细信息。

于 2008-10-02T04:58:57.713 回答
5

更正确的是:

export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid
于 2014-05-23T07:47:45.507 回答
3

我问自己同样的问题,但当前答案的问题是他们不安全地检查要被杀死的进程,所以......它可能导致可怕的错误:)......特别是如果有几个进程与模式匹配

作为免责声明,我不是 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
于 2016-02-22T13:38:48.497 回答
2

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

于 2008-10-02T05:42:31.323 回答
2

默认kill命令接受命令名称作为 PID 的替代。参见杀死 (1)。一个经常出现的问题是它bash提供了自己的kill接受作业编号,如kill %1,但不接受命令名称。这阻碍了默认命令。如果前一个功能比后者对您更有用,您可以bash通过调用禁用该版本

enable -n kill

有关更多信息,请参阅bash (1)kill中的enable条目。

于 2015-12-15T13:29:26.963 回答
1

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

于 2016-06-21T07:17:33.130 回答
0
ps aux | grep processname | cut -d' ' -f7 | xargs kill -9 $
于 2016-05-11T15:52:11.357 回答
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.*
于 2019-06-27T12:48:53.217 回答