用于终止进程的Bash函数
为了杀死bash中的进程,我为该函数创建了一个别名: 在我的.bashrc文件上用于终止进程的Bash函数,bash,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 因此,假设我想杀死流星进程: 让我们看看所有流星过程: 使用别名调用kill\u进程函数 因此,kill\u pro
kill_process(){
# $1 being a parameter for the process name
kill $(ps ax | grep "$1" | awk '{print $1}')
}
alias kill_process=kill_process
因此,假设我想杀死流星进程:
让我们看看所有流星过程:
使用别名调用kill\u进程
函数
因此,
kill\u process
函数有效地终止了meteor
进程,但它的kill
命令查找不存在的pid。请注意,ps aux | grep
没有列出pid21612
有没有改进kill\u进程
功能以避免这种情况的想法?我认为在您的情况下,killall命令可以满足您的要求:
killall NAME
正如斯沃根在回答中所建议的那样,按名称杀死进程的标准方法是使用
killall
至于你的kill\u进程
函数,过滤ps
的grep
表达式将匹配自己的grep
进程(你可以看到它在没有awk的情况下运行管道),但是当调用kill
时,该进程将不再运行。这就是你看到的信息
每次运行命令时,grep
都会使用新的PID再次运行:这就是您在测试它时无法在列表中找到它的原因
你可以:
首先运行ps
,将其导入文件或变量,然后运行grep
从列表中筛选出grep的PID
(更简单)supersskill
输出:
kill $(...) 2>/dev/null
+1注意,与上面的代码片段不同,这不是正则表达式匹配。它只会kill
具有确切名称的进程。@uʍopǝpısdn相反,当模式类似于p
时,使用模式匹配进行kill是非常危险的。可能最初的四个进程ID列表中有一个是grep'meteor'
命令(因为它的调用行与模式meteor
)匹配。并且是由$生成的进程ID之一(ps ax | grep“$1”| awk…)
行就是那个grep进程。但是当PID列表被赋予kill
时,那个grep进程已经停止了。或者可能只是使用pkill
。这个别名没有任何作用。
killall NAME
kill $(...) 2>/dev/null