代码之家  ›  专栏  ›  技术社区  ›  Paige Ruten

如何通过名称而不是PID终止进程?

  •  285
  • Paige Ruten  · 技术社区  · 16 年前

    有时,当我尝试启动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()

    17 回复  |  直到 3 年前
        1
  •  619
  •   joshtch    10 年前
        2
  •  166
  •   Giacomo1968    4 年前

    也可以使用:

    pkill -f "Process name"
    

    如果没有标志,pkill不能与name一起工作。

    什么时候 -f 设置时,将使用完整的命令行进行模式匹配。

        3
  •  69
  •   Nisse Engström vivek singh    7 年前

    名称 killall <name>

    基拉尔 运行任何指定 命令。如果未指定信号名称 指定,则发送SIGTERM。

    -哈普 -叹息 )或按编号(例如。 -1 - .

    表达式(选项 -r )并包含一个 特定的文件将被选择为 杀人,与他们的名字无关。

    ps aux ,你可能没有权利杀了它。。。

        4
  •  51
  •   fedorqui yar    11 年前

    再长一点的选择:

    kill `pidof firefox`
    
        5
  •  35
  •   Tahsin Turkoz    8 年前

    pgrep -f [part_of_a_command]
    

    如果结果符合预期。配合:

    pkill -f [part_of_a_command]
    
        6
  •  24
  •   Mike    5 年前

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

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

    *如果有pgrep,我会优先选择

        7
  •  23
  •   prosti    7 年前

    kill -9 `pidof firefox`
    

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

    kill -9 `pgrep firefox`
    

    pidof 由于它具有单线输出:

    > pgrep firefox
    6316
    6565
    > pidof firefox
    6565 6316
    
        8
  •  12
  •   Dhiraj    11 年前

    在Mac上,我找不到pgrep和pkill,killall也不工作,因此编写了一个简单的单行脚本:-

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

        9
  •  12
  •   jiwopene    3 年前

    使用 killall

    killall processname
    

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

        10
  •  7
  •   tripleee    8 年前

    要使用grep杀人:

    kill -9 `pgrep myprocess`
    
        11
  •  5
  •   Chadiso    10 年前

    更正确的做法是:

    export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid
    
        12
  •  5
  •   Dawid Gacek    4 年前

    我通常使用 killall 命令

    Check this link

        13
  •  3
  •   Fab    8 年前

    我也问过自己同样的问题,但目前的答案的问题是它们没有 安全检查要终止的进程 有几个进程与该模式匹配 .

    所以我写了一个小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
    
        14
  •  2
  •   Bernard    16 年前

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

        15
  •  2
  •   The Vee    8 年前

    默认值 kill 命令接受命令名作为PID的替代。看见 kill (1) . 一个经常发生的问题是 bash 提供自己的 杀死 它接受工作编号,比如 kill %1 通过调用

    enable -n kill

    杀死 enable 进入 bash (1) .

        16
  •  1
  •   Nived Thanima    8 年前

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

        17
  •  0
  •   Paul Roub Mark Dail    8 年前
    ps aux | grep processname | cut -d' ' -f7 | xargs kill -9 $
    
        18
  •  0
  •   Andrey Bochkov    5 年前

    awk oneliner,它解析 ps

    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.*