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

.bashrc saves previous process id and does not update in alias commands

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

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

每当我 运行 第一次 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 }') 将 return 之前的 pid,它已经被杀死。 现在请尽可能提出解决方案。

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

请从您的 .bashrc 中删除 servicestop 别名并添加:

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

在某种程度上,.bashrc 中的函数是 "aliases 2.0":更好


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

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

像这样使用它:

servicestop service.py

servicestop otherSuperService.py