python - ऑपर - लिनक्स मीनिंग इन हिंदी



पाइथन का उपयोग कर यूनिक्स या लिनक्स में किसी प्रोग्राम की प्रक्रिया आईडी कैसे प्राप्त करें? (6)

मैं पाइथन में कुछ निगरानी स्क्रिप्ट लिख रहा हूं और मैं उस प्रोग्राम के नाम दिए गए किसी भी यादृच्छिक चल रहे प्रोग्राम की प्रक्रिया आईडी प्राप्त करने का सबसे साफ तरीका ढूंढने की कोशिश कर रहा हूं

कुछ इस तरह

ps -ef | grep MyProgram

मैं उस के आउटपुट को पार्स कर सकता था हालांकि मैंने सोचा था कि अजगर में बेहतर तरीका हो सकता है

https://src-bin.com



Answer #2

कार्य को कोड के निम्नलिखित भाग का उपयोग करके हल किया जा सकता है, [0:28] अंतराल होने पर नाम कहां रखा जा रहा है, जबकि [2 9: 34] में वास्तविक पिड होता है।

import os

program_pid = 0
program_name = "notepad.exe"

task_manager_lines = os.popen("tasklist").readlines()
for line in task_manager_lines:
    try:
        if str(line[0:28]) == program_name + (28 - len(program_name) * ' ': #so it includes the whitespaces
            program_pid = int(line[29:34])
            break
    except:
        pass

print(program_pid)

Answer #3

यदि आप खुद को मानक पुस्तकालय में सीमित नहीं कर रहे हैं, तो मुझे psutil लिए psutil पसंद है।

उदाहरण के लिए सभी "पायथन" प्रक्रियाओं को ढूंढने के लिए:

>>> import psutil
>>> [p.info for p in psutil.process_iter(attrs=['pid', 'name']) if 'python' in p.info['name']]
[{'name': 'python3', 'pid': 21947},
 {'name': 'python', 'pid': 23835}]

Answer #4

यह फर्नांडो के जवाब की एक सरलीकृत विविधता है। यह लिनक्स और या तो पायथन 2 या 3 के लिए है। कोई बाहरी पुस्तकालय की आवश्यकता नहीं है, और कोई बाहरी प्रक्रिया नहीं चलती है।

import glob

def get_command_pid(command):
    for path in glob.glob('/proc/*/comm'):
        if open(path).read().rstrip() == command:
            return path.split('/')[2]

केवल पहली मिलान प्रक्रिया को वापस कर दिया जाएगा, जो कुछ उद्देश्यों के लिए अच्छी तरह से काम करता है। एकाधिक मिलान प्रक्रियाओं के पीआईडी ​​प्राप्त करने के लिए, आप केवल yield साथ return को प्रतिस्थापित कर सकते हैं, और उसके बाद pids = list(get_command_pid(command)) साथ एक सूची प्राप्त करें।

वैकल्पिक रूप से, एक अभिव्यक्ति के रूप में:

एक प्रक्रिया के लिए:

next(path.split('/')[2] for path in glob.glob('/proc/*/comm') if open(path).read().rstrip() == command)

कई प्रक्रियाओं के लिए:

[path.split('/')[2] for path in glob.glob('/proc/*/comm') if open(path).read().rstrip() == command]


Answer #6

psutil साथ:

( [sudo] pip install psutil साथ स्थापित किया जा सकता है)

import psutil

# Get current process pid
current_process_pid = psutil.Process().pid
print(current_process_pid)  # e.g 12971

# Get pids by program name
program_name = 'chrome'
process_pids = [process.pid for process in psutil.process_iter() if process.name == program_name]
print(process_pids)  # e.g [1059, 2343, ..., ..., 9645]




python