[英]Killing all python scripts except one python script and the grep process
我如何在 bash 中運行命令來殺死所有 python 腳本,除了名為test.py
腳本和 grep 的 pid 本身,以防我們使用類似ps -ef |grep
東西
我想我可以使用pgrep
python 之類的東西來忽略 grep 進程,但是我該如何排除test.py
腳本? 我知道有一個選項可以做 grep -v,有沒有選項可以做pgrep -v
說明:除了 grep process- 意味着當我們執行例如ps -ef |grep test1.py
我們還會得到用於帶來此結果的 grep pid。 我不想殺死它,因為在顯示結果的階段不再存在此過程。
編輯:我需要這個命令通過 python 的subprocess
模塊有效k = subprocess.Popen('[some_bash_cmd_here]',shell=True)
k.wait()
您可以使用pgrep -fl python
獲取與python
匹配的所有命令,然后通過從命令中排除test.py
將其與awk
進行管道傳輸以獲取進程 ID,最后將其通過管道傳輸到xargs kill
:
pgrep -fl python | awk '!/test\.py/{print $1}' | xargs kill
更好的方法是在 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)
使用 Python 3 和 PID 對 anubhava 和三元組方法進行了一些修改。
anubhava 方法(使用 PID 而不是腳本名稱):
import os
from subprocess import Popen
pid = os.getpid()
command=f"pgrep -fl python | awk '!/{pid}/{{print $1}}' | xargs kill"
result = Popen(command, shell=True)
三重法(使用PID):
import subprocess, os, signal
pid = os.getpid()
for proc in subprocess.check_output(['ps', '-ef']).decode().split('\n'): # ps options depend on your OS
if 'python' in proc:
current_pid = int(proc.split()[1])
if current_pid != pid:
try:
os.kill(current_pid, signal.SIGSTOP)
print("Killed: ", proc)
except:
print("Couldn't kill: ", proc)
如果您確實想使用腳本名稱,您也可以動態執行此操作:
from pathlib import Path
script_name = Path(__file__).name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.