GNU/Linux >> Linux の 問題 >  >> Linux

pidを使用してPythonからプロセスを終了するには?

と同じことをしたかったのですが、1 つのファイルで実行したかったのです。

ロジックは次のようになります:

  • 私の名前のスクリプトが実行されている場合は、それを強制終了して終了します
  • 私の名前のスクリプトが実行されていない場合は、何かをしてください

Bakuriu の回答を修正した結果、次のようになりました。

from os import getpid
from sys import argv, exit
import psutil  ## pip install psutil

myname = argv[0]
mypid = getpid()
for process in psutil.process_iter():
    if process.pid != mypid:
        for path in process.cmdline():
            if myname in path:
                print "process found"
                process.terminate()
                exit()

## your program starts here...

スクリプトを実行すると、スクリプトが行うことは何でも実行されます。スクリプトの別のインスタンスを実行すると、スクリプトの既存のインスタンスが強制終了されます。

これを使用して、時計をクリックすると実行される小さな PyGTK カレンダー ウィジェットを表示します。クリックしてもカレンダーが表示されていない場合、カレンダーが表示されます。カレンダーの実行中に時計をクリックすると、カレンダーが消えます。


すばらしい psutil の使用 ライブラリはとてもシンプルです:

p = psutil.Process(pid)
p.terminate()  #or p.kill()

新しいライブラリをインストールしたくない場合は、os を使用できます モジュール:

import os
import signal

os.kill(pid, signal.SIGTERM) #or signal.SIGKILL 

os.kill も参照してください ドキュメンテーション。

コマンド python StripCore.py の開始に興味がある場合 実行されていない場合、それ以外の場合は強制終了します。 psutil を使用できます これを確実に行うために。

次のようなもの:

import psutil
from subprocess import Popen

for process in psutil.process_iter():
    if process.cmdline() == ['python', 'StripCore.py']:
        print('Process found. Terminating it.')
        process.terminate()
        break
else:
    print('Process not found: starting it.')
    Popen(['python', 'StripCore.py'])

サンプル実行:

$python test_strip.py   #test_strip.py contains the code above
Process not found: starting it.
$python test_strip.py 
Process found. Terminating it.
$python test_strip.py 
Process not found: starting it.
$killall python
$python test_strip.py 
Process not found: starting it.
$python test_strip.py 
Process found. Terminating it.
$python test_strip.py 
Process not found: starting it.

注意 :以前の psutil バージョン cmdline 属性だった メソッドの代わりに。


Linux
  1. trace.py を使用して Python スクリプトをトレースする方法

  2. LinuxでPythonを使用してプロセスがまだ実行されているかどうかを確認するには?

  3. CからLinuxでPIDによってプロセスのCPU使用率を計算する方法は?

  1. シェルスクリプトでフォークされた子プロセスから PID を取得する方法

  2. プロセスがファイルを書き込めないようにする方法

  3. 開始したばかりのプロセスのpidを取得する方法

  1. Pythonスクリプトを使用してSFTPサーバーからファイルをダウンロードする方法

  2. Pidのないプロセスを特定する方法は?

  3. Pythonを3.4.3から3.5に更新する方法は??