我为此函数创建了一个别名,以便在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
功能的想法可以避免这种情况?
答案 0 :(得分:4)
我认为在你的情况下,killall命令会做你想要的:
killall NAME
答案 1 :(得分:3)
按名称杀死进程的标准方法是使用killall
,正如Swoogan在他的回答中所暗示的那样。
对于您的kill_process
函数,过滤grep
的{{1}}表达式将与自己的ps
进程匹配(您可以看到此运行管道时没有grep
}}),但是在调用awk
时,该进程不再运行。这就是你看到的信息。
每次运行该命令时,kill
都会再次使用新的PID运行:这是您在测试时无法在列表中找到它的原因。
你可以:
grep
,将其传输到文件或变量,然后ps
grep
的PID (更简单)supress grep
输出:
kill