And*_*mas 35 python unix linux process
我发现的唯一好方法是:
import sys
import os
try:
os.kill(int(sys.argv[1]), 0)
print "Running"
except:
print "Not running"
Run Code Online (Sandbox Code Playgroud)
(来源)
但这可靠吗?它适用于每个流程和每个分发吗?
Aar*_*paa 51
毕竟,马克的答案是要走的路,这就是/ proc文件系统存在的原因.对于更多复制/粘贴的东西:
>>> import os.path
>>> os.path.exists("/proc/0")
False
>>> os.path.exists("/proc/12")
True
Run Code Online (Sandbox Code Playgroud)
dF.*_*dF. 12
它应该可以在任何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"
Run Code Online (Sandbox Code Playgroud)
这是解决它的解决方案:
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!")
Run Code Online (Sandbox Code Playgroud)
我是一个Python + Linux新手,所以这可能不是最佳的.它解决了我的问题,并希望也能帮助其他人.
在我看来,基于PID的解决方案太脆弱了.如果您尝试检查状态的进程已终止,则其PID可以由新进程重用.所以,IMO ShaChris23 Python + Linux新手给出了问题的最佳解决方案.即使它只在有问题的进程可以通过命令字符串唯一标识,或者您确定一次只能运行一个进程时才有效.
我用它来获取进程,以及指定名称的进程计数
import os
processname = 'somprocessname'
tmp = os.popen("ps -Af").read()
proccount = tmp.count(processname)
if proccount > 0:
print(proccount, ' processes running of ', processname, 'type')
Run Code Online (Sandbox Code Playgroud)