1. ホーム
  2. python

[解決済み] 名前を指定してプロセスを終了させる?

2022-10-08 23:42:17

質問

私はあるプロセス(特に iChat)を終了させようとしています。コマンド ラインで、私はこれらのコマンドを使用します。

ps -A | grep iChat 

では

kill -9 PID

しかし、これらのコマンドをPythonにどのように変換すればいいのか、正確にはわかりません。

どのように解決するのですか?

Unix 系のプラットフォームを使っていると仮定して (つまり ps -A が存在する) と仮定します。

>>> import subprocess, signal
>>> import os
>>> p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
>>> out, err = p.communicate()

ps -A の出力は out 変数(文字列)に出力されます。 それを行に分解してループさせると...。

>>> for line in out.splitlines():
...   if 'iChat' in line:
...     pid = int(line.split(None, 1)[0])
...     os.kill(pid, signal.SIGKILL)
... 

(インポートを避けるために signal を使用することもできます。 9 の代わりに signal.SIGKILL の代わりに、を使うこともできますが、私はそのスタイルが特に好きではないので、むしろこの方法で名前付き定数を使いたいのです)。

もちろん、これらの行でもっと洗練された処理を行うこともできますが、これはシェルで行っていることを模倣したものです。

もしあなたが求めているものが ps を避けることであるなら、異なる Unix ライクなシステム間でそれを行うのは困難です ( ps はある意味プロセスリストを取得するための共通の API です)。 しかし、特定の Unix ライクなシステムのみを念頭に置いている場合 (クロスプラットフォームの移植性を必要としない場合)、 可能かもしれません。特に Linux では /proc 擬似ファイルシステムは非常に便利です。 しかし、この後者の部分で私たちが手助けする前に、あなたの正確な要件を明らかにする必要があります。