python - नमक - प्रेगनेंसी टेस्ट रिजल्ट्स




यदि आप एक प्रक्रिया अभी भी चल रहे हैं, तो आप पायथन के साथ लिनक्स में कैसे जांच करते हैं? (6)

इसे किसी भी POSIX सिस्टम पर काम करना चाहिए (यद्यपि /proc फाइलसिस्टम को देखते हुए, जैसा कि अन्य लोगों ने सुझाया है, यदि आपको पता है कि यह वहां होना है तो आसान है)।

हालांकि: यदि आपके पास इस प्रक्रिया को संकेत देने की अनुमति नहीं है, तो os.kill भी विफल हो सकता है। आपको ऐसा कुछ करने की आवश्यकता होगी:

import sys
import os
import errno

try:
    os.kill(int(sys.argv[1]), 0)
except OSError, err:
    if err.errno == errno.ESRCH:
        print "Not running"
    elif err.errno == errno.EPERM:
        print "No permission to signal this process!"
    else:
        print "Unknown error"
else:
    print "Running"

मुझे मिल गया एकमात्र अच्छा तरीका यह है:

import sys
import os

try:
        os.kill(int(sys.argv[1]), 0)
        print "Running"
except:
        print "Not running"

( स्रोत )
लेकिन क्या यह विश्वसनीय है? क्या यह हर प्रक्रिया और हर वितरण के साथ काम करता है?


मार्क का उत्तर ही जाने का रास्ता है, आखिरकार, यही कारण है कि / proc फाइल सिस्टम वहाँ है थोड़ी अधिक कॉपी / पेस्टेबल के लिए:

 >>> import os.path
 >>> os.path.exists("/proc/0")
 False
 >>> os.path.exists("/proc/12")
 True

// लेकिन यह विश्वसनीय है? क्या यह हर प्रक्रिया और हर वितरण के साथ काम करता है?

हां, यह किसी भी लिनक्स वितरण पर काम करना चाहिए। ध्यान रखें कि / proc यूनिक्स आधारित सिस्टम पर आसानी से उपलब्ध नहीं है, हालांकि (फ्री बीएसडी, ओएसएक्स)।


यह समाधान मेरे लिए इसका हल है:

import os
import subprocess
import re

def findThisProcess( process_name ):
  ps     = subprocess.Popen("ps -eaf | grep "+process_name, shell=True, stdout=subprocess.PIPE)
  output = ps.stdout.read()
  ps.stdout.close()
  ps.wait()

  return output

# This is the function you can use  
def isThisRunning( process_name ):
  output = findThisProcess( process_name )

  if re.search('path/of/process'+process_name, output) is None:
    return False
  else:
    return True

# Example of how to use
if isThisRunning('some_process') == False:
  print("Not running")
else:
  print("Running!")

मैं एक पायथन + लिनक्स नौसिखिया हूं, इसलिए यह इष्टतम न हो। यह मेरी समस्या का हल है, और उम्मीद है कि अन्य लोगों को भी मदद मिलेगी।


ShaChris23 स्क्रिप्ट के बदसूरत रूप से संशोधित संस्करण जाँच करता है कि proc_name मान प्रक्रिया में मौजूद है args स्ट्रिंग (उदाहरण के लिए पायथन के साथ निष्पादित पायथन):

def process_exists(proc_name):
    ps = subprocess.Popen("ps ax -o pid= -o args= ", shell=True, stdout=subprocess.PIPE)
    ps_pid = ps.pid
    output = ps.stdout.read()
    ps.stdout.close()
    ps.wait()

    for line in output.split("\n"):
        res = re.findall("(\d+) (.*)", line)
        if res:
            pid = int(res[0][0])
            if proc_name in res[0][1] and pid != os.getpid() and pid != ps_pid:
                return True
    return False

मुझे ऊपर दिए गए संस्करणों के साथ समस्या थी (उदाहरण के लिए फ़ंक्शन को स्ट्रिंग का एक हिस्सा भी मिल गया था और ऐसी चीजें ...) तो मैंने अपनी खुद की, संशोधित संस्करण का लिखा मैक्सिम कोज़लेंको:

#proc    -> name/id of the process
#id = 1  -> search for pid
#id = 0  -> search for name (default)

def process_exists(proc, id = 0):
   ps = subprocess.Popen("ps -A", shell=True, stdout=subprocess.PIPE)
   ps_pid = ps.pid
   output = ps.stdout.read()
   ps.stdout.close()
   ps.wait()

   for line in output.split("\n"):
      if line != "" and line != None:
        fields = line.split()
        pid = fields[0]
        pname = fields[3]

        if(id == 0):
            if(pname == proc):
                return True
        else:
            if(pid == proc):
                return True
return False

मुझे लगता है कि यह और अधिक विश्वसनीय, पढ़ने में आसान है और आपके पास प्रोसेस आईडी या नाम की जांच करने का विकल्प है





process