Linux .bashrc保存以前的进程id,不在alias命令中更新
我在.bashrc中创建了一个别名来终止我的Linux .bashrc保存以前的进程id,不在alias命令中更新,linux,bash,alias,Linux,Bash,Alias,我在.bashrc中创建了一个别名来终止我的python service.py&进程 alias servicestop="kill $(ps -ef | grep -w service.py | grep -v grep | awk '{print $2}')" 每当我第一次运行servicestop命令时,它都会终止进程。 但是,每当我启动进程pythonservice.py&,并执行命令servicestop时,它都会给出一个错误 经过研究,我发现了以下几点。 当我第一次运行pytho
python service.py&
进程
alias servicestop="kill $(ps -ef | grep -w service.py | grep -v grep | awk '{print $2}')"
每当我第一次运行servicestop
命令时,它都会终止进程。
但是,每当我启动进程pythonservice.py&
,并执行命令servicestop
时,它都会给出一个错误
经过研究,我发现了以下几点。
当我第一次运行pythonservice.py&
进程时。其进程id为512
。
命令servicestop
终止该进程(512)
现在,当我运行第二次进程pythonservice.py&
时。它的进程id是546(肯定会有所不同)
当我运行命令servicestop
时。它将给出以下错误:
-bash: kill: (512) - No such process
这意味着$(ps-ef | grep-w service.py | grep-v grep | awk'{print$2}')
将返回先前的pid,该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
请从
.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
您需要使用函数,因为此字符串在开始时只计算一次。您可以给出解决方案。您需要使用函数,由于此字符串在开始时只计算一次,您可以给出解决方案。答案受@SergiusI启发,我建议对答案进行一些更改,但没有更新。我看不到您的建议-请不要犹豫,添加另一条注释,以便我可以进行必要的更改。在kill命令结束时删除$1。这不需要。我已经删除了它,现在它没有给出任何错误。为什么不直接使用
pgrep
而不是ps-ef
?答案受@SergiusI启发,我建议对答案进行一些更改,但没有更新。我看不到你的建议-请毫不犹豫地添加另一条评论,以便我可以进行必要的更改。在结束时删除$1指挥部。这不是必要的。我已经删除了它,现在它没有给出任何错误。为什么不直接使用pgrep
而不是ps-ef
?