.bashrc保存以前的进程ID,不会在别名命令中更新

时间:2018-03-27 10:02:11

标签: linux bash alias

我在.bashrc中创建了一个别名来杀死我的python service.py &进程

alias servicestop="kill $(ps -ef | grep -w service.py  | grep -v grep | awk '{print $2}')"

每当我第一次运行servicestop命令时,它都会终止进程。 但是每当我开始处理python service.py &并执行命令servicestop时,它都会给出错误。

经过研究,我发现了以下事项。 当我第一次运行python service.py &进程时。其进程ID为512。 并且,命令servicestop终止该进程(512)。

现在我运行第二次进程python service.py &。它的进程ID是546.(肯定会有所不同)。

当我运行命令servicestop时。它会给出以下错误:

-bash: kill: (512) - No such process

这意味着$(ps -ef | grep -w service.py | grep -v grep | awk '{print $2}')将返回之前已被杀死的pid。 现在请建议解决方案。

所以每当我想运行servicestop命令时,我必须首先运行source .bashrc命令,然后运行servicestop命令使其工作。

1 个答案:

答案 0 :(得分:3)

请从servicestop删除.bashrc别名,然后添加:

servicestop(){
  kill $(ps -ef | grep -w service.py  | grep -v grep | awk '{print $2}');
}

在某种程度上,.bashrc中的函数是“别名2.0”:更好

更好:同样的功能;但要将要杀死的脚本名称作为参数:

servicestop(){
  kill $(ps -ef | grep -w $1  | grep -v servicestop | awk '{print $2}');
}

使用它:

servicestop service.py

servicestop otherSuperService.py