Bash函数可以杀死进程

时间:2015-10-04 02:56:42

标签: bash

我为此函数创建了一个别名,以便在bash中杀死进程:

在我的 .bashrc 文件

  kill_process(){
    # $1 being a parameter for the process name
    kill $(ps ax | grep "$1" | awk '{print $1}')
}

alias kill_process=kill_process

所以,假设我要杀死meteor进程:

让我们看看所有的流星过程:

ps aux | grep 'meteor' | awk '{print $2}' 

21565
21602
21575
21546

使用别名

调用kill_process函数
kill_process meteor

bash: kill: (21612) - No such process

因此,kill_process函数有效地终止了meteor进程,但它的kill命令查找不存在的pid。请注意,21612未列出pid ps aux | grep有哪些改进kill_process功能的想法可以避免这种情况?

2 个答案:

答案 0 :(得分:4)

我认为在你的情况下,killall命令会做你想要的:

killall NAME

答案 1 :(得分:3)

按名称杀死进程的标准方法是使用killall,正如Swoogan在他的回答中所暗示的那样。

对于您的kill_process函数,过滤grep的{​​{1}}表达式将与自己的ps进程匹配(您可以看到此运行管道时没有grep }}),但是在调用awk时,该进程不再运行。这就是你看到的信息。

每次运行该命令时,kill都会再次使用新的PID运行:这是您在测试时无法在列表中找到它的原因。

你可以:

  1. 首先运行grep,将其传输到文件或变量,然后ps
  2. 从列表中过滤grep的PID
  3. (更简单)supress grep输出:

    kill