GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendapatkan PID dengan nama proses?

Anda juga dapat menggunakan pgrep , di prgep Anda juga dapat memberikan pola untuk pencocokan

import subprocess
child = subprocess.Popen(['pgrep','program_name'], stdout=subprocess.PIPE, shell=True)
result = child.communicate()[0]

Anda juga dapat menggunakan awk dengan ps seperti ini

ps aux | awk '/name/{print $2}'

Anda bisa mendapatkan pid proses dengan nama menggunakan pidof melalui subprocess.check_output:

from subprocess import check_output
def get_pid(name):
    return check_output(["pidof",name])


In [5]: get_pid("java")
Out[5]: '23366\n'

check_output(["pidof",name]) akan menjalankan perintah sebagai "pidof process_name" , Jika kode kembalian bukan nol, kode tersebut memunculkan CalledProcessError.

Untuk menangani banyak entri dan mentransmisikan ke int:

from subprocess import check_output
def get_pid(name):
    return map(int,check_output(["pidof",name]).split())

Di [21]:get_pid("chrome")

Out[21]: 
[27698, 27678, 27665, 27649, 27540, 27530, 27517, 14884, 14719, 13849, 13708, 7713, 7310, 7291, 7217, 7208, 7204, 7189, 7180, 7175, 7166, 7151, 7138, 7127, 7117, 7114, 7107, 7095, 7091, 7087, 7083, 7073, 7065, 7056, 7048, 7028, 7011, 6997]

Atau berikan -s bendera untuk mendapatkan satu pid:

def get_pid(name):
    return int(check_output(["pidof","-s",name]))

In [25]: get_pid("chrome")
Out[25]: 27698

Untuk posix (Linux, BSD, dll... hanya perlu /proc direktori untuk dipasang) lebih mudah untuk bekerja dengan file os di /proc. Ini murni python, tidak perlu memanggil program shell di luar.

Bekerja pada python 2 dan 3 (Satu-satunya perbedaan (2to3) adalah pohon Pengecualian, oleh karena itu "kecuali Pengecualian ", yang saya tidak suka tetapi tetap menjaga kompatibilitas. Juga bisa membuat pengecualian khusus.)

#!/usr/bin/env python

import os
import sys


for dirname in os.listdir('/proc'):
    if dirname == 'curproc':
        continue

    try:
        with open('/proc/{}/cmdline'.format(dirname), mode='rb') as fd:
            content = fd.read().decode().split('\x00')
    except Exception:
        continue

    for i in sys.argv[1:]:
        if i in content[0]:
            print('{0:<12} : {1}'.format(dirname, ' '.join(content)))

Contoh Keluaran (berfungsi seperti pgrep):

phoemur ~/python $ ./pgrep.py bash
1487         : -bash 
1779         : /bin/bash

Anda dapat menggunakan psutil paket:

Pasang

pip install psutil

Penggunaan:

import psutil

process_name = "chrome"
pid = None

for proc in psutil.process_iter():
    if process_name in proc.name():
       pid = proc.pid


Linux
  1. Bagaimana saya bisa mematikan proses dengan nama, bukan PID?

  2. Bagaimana cara mendapatkan jalur proses di Unix / Linux

  3. Bagaimana cara mendapatkan ID proses dari proses latar belakang?

  1. Perintah Linux dapatkan id proses kucing jantan dengan nama

  2. Nama proses dari pidnya di linux

  3. Bagaimana cara mendapatkan hanya ID proses dalam menentukan nama proses di linux?

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

  2. Bagaimana Mengidentifikasi Port ke Suatu Proses?

  3. Bagaimana cara mendapatkan pid dari suatu proses dan mengaktifkan kill -9 di skrip Shell?