2016-09-17 46 views
1

我怎么能在bash运行命令杀死除脚本所有的Python脚本调用test.py和grep的进程的PID本身,在情况下,我们使用类似ps -ef |grep杀死所有的Python脚本,除了一个python脚本和grep的过程

我认为我可以使用类似pgrep python来忽略grep进程,但我怎么也排除test.py脚本?我知道有一个选项做的grep -v,有选择做pgrep -v

澄清:除了grep的过程 - 是指当我们例如ps -ef |grep test1.py做我们也获取用于把这个结果grep的PID。我不想杀死它,因为这个过程不再存在于显示结果的阶段。

编辑: 我需要这个命令,通过Python的subprocess模块
k = subprocess.Popen('[some_bash_cmd_here]',shell=True)
k.wait()

回答

1

是有效的,您可以使用pgrep -fl python得到匹配python的所有命令,然后把它与awk管道来获得进程ID通过从命令中排除test.py并最终将其输入到xargs kill

pgrep -fl python | awk '!/test\.py/{print $1}' | xargs kill 
+0

要获得的参数在最近'pgrep's并不需要使用' -fa'而不是'-fl'?至少在RHEL 7的情况下,以及最近的Fedora年份也是如此 –

+0

其实我并不了解最新的'pgrep',因为我在OSX上,并且通过'home brew'安装了另一个'pkill',并且它们都没有支持'-a' – anubhava

+0

非常感谢,现在我尝试通过可以运行python脚本的gitlab-ci来启动这个脚本。 在test.py中,我执行以下代码: 'k = subprocess.Popen(bash_cmd,shell = True) k.wait()' – JavaSa

1

更好的方法是做过滤在Python本身,在这里你可以轻松地保持状态等

import subprocess, os 
for proc in subprocess.check_output(['ps', '-ef']).split('\n'): # ps options depend on your OS 
    if 'python' in proc and 'test.py' not in proc: 
     os.kill(proc)