繁体   English   中英

Bash函数可以杀死进程

[英]Bash function to kill process

我为这个函数创建了一个别名,以便在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。 请注意, ps aux | grep未列出pid 21612 ps aux | grep 有什么想法来改进kill_process函数来避免这种情况吗?

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

killall NAME

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

至于你的kill_process函数,过滤psgrep表达式将匹配自己的grep进程(你可以看到这个没有awk运行管道),但是当调用kill ,该进程不再运行。 那是你看到的信息。

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

你可以:

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

     kill $(...) 2>/dev/null 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM