GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menghentikan proses dari Python menggunakan pid?

Saya ingin melakukan hal yang sama, tetapi saya ingin melakukannya dalam satu file.

Jadi logikanya adalah:

  • jika skrip dengan nama saya sedang berjalan, matikan, lalu keluar
  • jika skrip dengan nama saya tidak berjalan, lakukan sesuatu

Saya memodifikasi jawabannya oleh Bakuriu dan menghasilkan ini:

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

Menjalankan skrip akan melakukan apa pun yang dilakukan skrip. Menjalankan contoh skrip lainnya akan mematikan semua contoh skrip yang ada.

Saya menggunakan ini untuk menampilkan widget kalender PyGTK kecil yang berjalan saat saya mengklik jam. Jika saya mengklik dan kalender tidak aktif, kalender akan ditampilkan. Jika kalender berjalan dan saya mengeklik jam, kalender akan hilang.


Menggunakan psutil yang mengagumkan perpustakaan itu cukup sederhana:

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

Jika Anda tidak ingin memasang pustaka baru, Anda dapat menggunakan os modul:

import os
import signal

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

Lihat juga os.kill dokumentasi.

Jika Anda tertarik untuk memulai perintah python StripCore.py jika tidak berjalan, dan mematikannya sebaliknya, Anda dapat menggunakan psutil untuk melakukan ini dengan andal.

Sesuatu seperti:

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

Contoh lari:

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

Catatan :Di psutil sebelumnya versi cmdline adalah atribut bukan metode.


Linux
  1. Cara mengunduh File dari server SFTP Menggunakan skrip python

  2. Bagaimana Cara Memperbarui Python Dari 3.4.3 Menjadi 3.5??

  3. Cara Melacak Skrip Python menggunakan trace.py

  1. Bagaimana cara mematikan proses di Linux menggunakan perintah?

  2. Bagaimana cara memeriksa apakah suatu proses masih berjalan menggunakan Python di Linux?

  3. Bagaimana cara menghitung penggunaan CPU dari suatu proses oleh PID di Linux dari C?

  1. Cara menghentikan subproses python yang diluncurkan dengan Shell=True

  2. Cara mendapatkan PID dari proses anak bercabang di skrip Shell

  3. Bagaimana cara mendapatkan PID induk dari proses yang diberikan di GNU/Linux dari baris perintah?