2016-09-17 5 views
1

Wie kann ich Befehl in bash ausführen, um alle Python-Skripte außer Skript test.py genannt zu töten und die grep selbst pid, falls wir so etwas wie ps -ef |grepTöten alle Python-Skripte mit einer Ausnahme Python-Skript und dem grep Prozess

ich verwenden denke, ich kann etwas wie pgrep Python verwenden, um den Grep-Prozess zu ignorieren, aber wie schließe ich auch das test.py Skript aus? Ich weiß, dass es eine Option ist grep -v zu tun, gibt es Option pgrep -v

Klärung zu tun: außer grep prozess- bedeutet, wenn wir zum Beispiel tun ps -ef |grep test1.py wir auch das grep pid erhalten, die dieses Ergebnis bringen verwendet. Ich möchte es nicht töten, da dieser Prozess in der Phase, in der die Ergebnisse gezeigt werden, nicht mehr existiert.

EDIT: Ich brauche diesen Befehl Modul gültig sein durch subprocess der Python
k = subprocess.Popen('[some_bash_cmd_here]',shell=True)
k.wait()

Antwort

1

Sie pgrep -fl python alle Befehle python passend erhalten können sie dann mit awk das bekommen geleitet bekommen Prozess-ID durch Ausschließen von test.py von den Befehlen und schließlich Pipe es zu xargs kill:

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

Um die Argumente in der neueren 'pgrep's nicht zu bekommen, was Sie brauchen' zu verwenden -fa' statt '-fl'? Zumindest bei RHEL 7 ist das der Fall, und bei den letzten Fedora-Versionen auch –

+0

Eigentlich weiß ich nichts über die neuesten 'pgrep's, da ich auf OSX bin und ein anderes' pkill' über 'home brew' installiert habe und beide nicht support '-a' – anubhava

+0

Vielen Dank jetzt Ich versuche dieses Skript über gitlab-ci zu starten, welches Python-Skripte ausführen kann. In test.py mache ich folgendes, das Sie in den folgenden Code geschrieben haben: 'k = subprocess.Popen (bash_cmd, shell = True) k.wait()' – JavaSa

1

Ein viel besserer Ansatz ist es, die Filterung in Python selbst zu tun, wo man leicht Zustand halten usw.

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) 
Verwandte Themen