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

标签 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命令来实现工作。

最佳答案

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

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

关于linux - .bashrc 保存以前的进程 ID 并且不会在别名命令中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49509919/

相关文章:

bash - Emacs M-x shell 和覆盖 bash 键盘绑定(bind)

sql - 定义字段的(别名)名称

powershell - Powershell别名的多个值

java - Maven 使用与系统不同的时区

linux - 解析虚拟主机 apache 2

bash - 如何找到Logstash在EOF?

git - 如何在 git 别名中使用 bash 函数?

linux - 未在 Eclipse 中评估的新 Scala 工作表

c - 找不到 perl 命令

linux - 使用 sed 在 bash 中将文本添加到行尾