Unix上でPythonから実行中のすべてのプロセスのプロセスリストを取得するには、コマンド/プロセスの名前とプロセスIDを含めて、プロセスをフィルタリングして強制終了する方法を教えてください。
質問する
29540 次
5 に答える
16
Pythonの適切なポータブルソリューションは、psutilを使用することです。PIDと対話するためのさまざまなAPIがあります。
>>> import psutil
>>> psutil.pids()
[1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, ..., 32498]
>>> psutil.pid_exists(32498)
True
>>> p = psutil.Process(32498)
>>> p.name()
'python'
>>> p.cmdline()
['python', 'script.py']
>>> p.terminate()
>>> p.wait()
...そして「検索して殺す」場合:
for p in psutil.process_iter():
if 'nginx' in p.name() or 'nginx' in ' '.join(p.cmdline()):
p.terminate()
p.wait()
于 2017-03-28T09:39:13.907 に答える
10
subprocess
Linuxでは、モジュールを含む適切に最近のPythonを使用します。
from subprocess import Popen, PIPE
process = Popen(['ps', '-eo' ,'pid,args'], stdout=PIPE, stderr=PIPE)
stdout, notused = process.communicate()
for line in stdout.splitlines():
pid, cmdline = line.split(' ', 1)
#Do whatever filtering and processing is needed
正確なニーズによっては、psコマンドを微調整する必要がある場合があります。
于 2009-07-07T10:02:17.660 に答える
1
Linuxでは、おそらく最も簡単な解決策は外部ps
コマンドを使用することです。
>>> import os
>>> data = [(int(p), c) for p, c in [x.rstrip('\n').split(' ', 1) \
... for x in os.popen('ps h -eo pid:1,command')]]
他のシステムでは、オプションをに変更する必要がある場合がありますps
。
それでも、とで実行することをお勧めしman
ます。pgrep
pkill
于 2009-07-07T10:01:45.947 に答える
0
psutilをインストールします。
$pip install psutil
psutilのインポート:
>>> import psutil
プロセスリストを保存するリストを定義します。
>>> processlist=list()
リストにプロセスを追加します。
>>> for process in psutil.process_iter():
processlist.append(process.name())
プロセスリストの取得:
>>> print(processlist)
完全なコード:
import psutil
processlist=list()
for process in psutil.process_iter():
processlist.append(process.name())
print(processlist)
于 2021-10-18T16:47:26.807 に答える
-8
なぜPythonなのか?プロセス名に
直接使用できます。killall
于 2009-07-07T09:45:20.127 に答える