GNU/Linux >> Belajar Linux >  >> Linux

Pustaka Python untuk manajemen proses Linux

Karena Anda mengatakan ini adalah server Linux, memanggil ps eksternal biner biasanya lebih lambat, menggunakan lebih banyak sumber daya, dan lebih rawan kesalahan daripada menggunakan informasi dari /proc langsung.

Karena tidak ada orang lain yang disebutkan, satu cara sederhana adalah:

glob.glob('/proc/[0-9]*/')

Semoga berhasil.


Untuk memulai/menghentikan sub proses python Anda dapat menggunakan modul subproses. Untuk memeriksa apakah mereka sedang berjalan, Anda dapat menggunakan psutil:

>>> import psutil
>>> pid = 1034  # some pid
>>> psutil.pid_exists(pid)
True
>>>

...atau ini (ini juga akan memeriksa apakah PID telah digunakan kembali):

>>> p = psutil.Process(pid)
>>> p.is_running()
True
>>>

Inilah yang saya gunakan. Ini menggunakan procfs (jadi Anda terbatas pada sistem seperti Unix, menurut saya tidak akan berfungsi pada mac) dan glob yang disebutkan sebelumnya. Itu juga mendapatkan cmdline, yang memungkinkan Anda mengidentifikasi prosesnya. Untuk mematikan proses, Anda dapat menggunakan os.kill(signal.SIGTERM, pid) . Untuk menggunakan subproses, silakan periksa pos ini Python, Popen dan pilih - menunggu proses berhenti atau waktu tunggu

def list_processes():
    """
    This function will return an iterator with the process pid/cmdline tuple

    :return: pid, cmdline tuple via iterator
    :rtype: iterator

    >>> for procs in list_processes():
    >>>     print procs
    ('5593', '/usr/lib/mozilla/kmozillahelper')
    ('6353', 'pickup -l -t fifo -u')
    ('6640', 'kdeinit4: konsole [kdeinit]')
    ('6643', '/bin/bash')
    ('7451', '/usr/bin/python /usr/bin/ipython')
    """
    for pid_path in glob.glob('/proc/[0-9]*/'):

        # cmdline represents the command whith which the process was started
        f = open("%s/cmdline" % pid_path)
        pid = pid_path.split("/")[2] # get the PID
        # we replace the \x00 to spaces to make a prettier output from kernel
        cmdline = f.read().replace("\x00", " ").rstrip()
        f.close()

        yield (pid, cmdline)

Memeriksa daftar proses yang berjalan dilakukan (bahkan oleh utilitas inti seperti "ps") dengan melihat isi direktori /proc.

Dengan demikian, pustaka yang Anda minati untuk menanyakan proses yang sedang berjalan sama seperti yang digunakan untuk bekerja dengan berkas dan direktori lainnya (mis. sys atau os , tergantung rasa yang Anda cari. Berikan perhatian khusus pada os.path meskipun, itu melakukan sebagian besar dari apa yang Anda cari). Untuk mengakhiri atau berinteraksi dengan proses, Anda mengirimi mereka sinyal, yang dilakukan dengan os.kill . Terakhir, Anda memulai proses baru menggunakan os.popen dan teman-teman.


Linux
  1. Cara mengemas aplikasi Python untuk Linux

  2. 30 Latihan Proses Linux Untuk Sysadmin

  3. Linux – Batasi Penggunaan Memori Untuk Proses Linux Tunggal?

  1. Menggunakan AppImage untuk manajemen paket Linux

  2. 10+ contoh untuk mematikan proses di Linux

  3. Monitor Proses setara untuk Linux?

  1. 8 perintah Linux untuk manajemen proses yang efektif

  2. Dasar-dasar Perintah Linux:7 perintah untuk manajemen proses

  3. Linux – Bagaimana Cara Berhenti Berbagi Jaringan Untuk Proses Saat Ini?