GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie beendet man den Prozess von Python mit PID?

Ich wollte dasselbe tun wie, aber ich wollte es in der einen Datei tun.

Die Logik wäre also:

  • Wenn ein Skript mit meinem Namen läuft, beende es und beende es dann
  • Wenn ein Skript mit meinem Namen nicht läuft, tu was

Ich habe die Antwort von Bakuriu geändert und mir Folgendes ausgedacht:

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...

Das Ausführen des Skripts wird das tun, was das Skript tut. Wenn Sie eine weitere Instanz des Skripts ausführen, wird jede vorhandene Instanz des Skripts beendet.

Ich verwende dies, um ein kleines PyGTK-Kalender-Widget anzuzeigen, das ausgeführt wird, wenn ich auf die Uhr klicke. Wenn ich klicke und der Kalender nicht aktiv ist, wird der Kalender angezeigt. Wenn der Kalender läuft und ich auf die Uhr klicke, verschwindet der Kalender.


Mit dem tollen psutil Bibliothek ist es ziemlich einfach:

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

Wenn Sie keine neue Bibliothek installieren möchten, können Sie die os verwenden Modul:

import os
import signal

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

Siehe auch os.kill Dokumentation.

Wenn Sie daran interessiert sind, den Befehl python StripCore.py zu starten wenn es nicht läuft, und es andernfalls beenden, können Sie psutil verwenden um dies zuverlässig zu tun.

Etwas wie:

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'])

Beispiellauf:

$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.

Hinweis :Im vorherigen psutil Versionen cmdline war ein Attribut statt einer Methode.


Linux
  1. So laden Sie Dateien vom SFTP-Server mit Python-Skript herunter

  2. Wie identifiziere ich einen Prozess, der keine Pid hat?

  3. Wie beendet man einen Prozess unter Linux mit dem Befehl?

  4. Wie kann ich mit Python unter Linux überprüfen, ob ein Prozess noch läuft?

  5. So beenden Sie einen Python-Unterprozess, der mit Shell=True gestartet wurde

So finden Sie einen Prozessnamen mithilfe der PID-Nummer in Linux

So kopieren Sie Elemente von einer DynamoDB-Tabelle in eine andere DynamoDB-Tabelle mit Python auf AWS

So erstellen Sie einen S3-Bucket mit Python Boto3 auf AWS

So ändern Sie die Größe von Bildern mit Python

Wie aktualisiere ich von 12.04 auf 12.10 mit CD?

So finden Sie den Prozessnamen anhand seiner PID