如果进程仍在运行,如何在Linux中使用Python进行检查?
时间:2020-03-05 18:46:01 来源:igfitidea点击:
我发现的唯一好方法是:
import sys import os try: os.kill(int(sys.argv[1]), 0) print "Running" except: print "Not running"
(来源)
但这可靠吗?它适用于每个流程和每个发行版吗?
解决方案
回答
在Linux上,我们可以在目录/ proc / $ PID中查找有关该进程的信息。实际上,如果目录存在,则该进程正在运行。
回答
它应该可以在任何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"
回答
毕竟,Mark的答案就是解决之道,这就是/ proc文件系统在那里的原因。对于一些复制/粘贴的东西:
>>> import os.path >>> os.path.exists("/proc/0") False >>> os.path.exists("/proc/12") True
回答
//但是这可靠吗?它适用于每个流程和每个发行版吗?
是的,它可以在任何Linux发行版上使用。注意/ proc在基于Unix的系统上不容易使用(FreeBSD,OSX)。
回答
这是为我解决的解决方案:
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!")
我是Python + Linux新手,所以这可能不是最佳选择。它解决了我的问题,希望也能对其他人有所帮助。