当前位置:  开发笔记 > 编程语言 > 正文

如果进程仍在运行,如何使用Python检入Linux?

如何解决《如果进程仍在运行,如何使用Python检入Linux?》经验,为你挑选了7个好方法。

我发现的唯一方法是:

import sys
import os

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

(来源)
但这可靠吗?它适用于每个流程和每个分发吗?



1> Aaron Maenpa..:

毕竟,马克的答案是要走的路,这就是/ proc文件系统存在的原因.对于更多复制/粘贴的东西:

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



2> Mark Harriso..:

在linux上,您可以查看目录/ proc/$ PID以获取有关该进程的信息.实际上,如果该目录存在,则该进程正在运行.



3> dF...:

它应该可以在任何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"



4> sivabudh..:

这是解决它的解决方案:

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新手,所以这可能不是最佳的.它解决了我的问题,并希望也能帮助其他人.



5> Marius..:

//但这可靠吗?它适用于每个流程和每个分发吗?

是的,它应该适用于任何Linux发行版.请注意,/ proc在基于Unix的系统上并不容易获得(FreeBSD,OSX).



6> timblaktu..:

在我看来,基于PID的解决方案太脆弱了.如果您尝试检查状态的进程已终止,则其PID可以由新进程重用.所以,IMO ShaChris23 Python + Linux新手给出了问题的最佳解决方案.即使它只在有问题的进程可以通过命令字符串唯一标识,或者您确定一次只能运行一个进程时才有效.


如果您运行的是某些版本的Linux,则唯一PID的数量为32768或/ proc/sys/kernel/pid_max中的任何值,这使得重用的PID不太可能用于短期运行的程序.

7> felbus..:

我用它来获取进程,以及指定名称的进程计数

import os

processname = 'somprocessname'
tmp = os.popen("ps -Af").read()
proccount = tmp.count(processname)

if proccount > 0:
    print(proccount, ' processes running of ', processname, 'type')

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有