Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux .bashrc保存以前的进程id,不在alias命令中更新_Linux_Bash_Alias - Fatal编程技术网

Linux .bashrc保存以前的进程id,不在alias命令中更新

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

我在.bashrc中创建了一个别名来终止我的
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