簡體   English   中英

在Python中,不使用/ proc文件系統,如何判斷給定的PID是否正在運行?

[英]In Python, without using the /proc filesystem, how do I tell if a given PID is running?

假設我有一個PID,比如555.我想看看那個pid是否正在運行或已經完成。 我可以檢查/ proc /但我在生產環境中無法訪問它。 什么是最好的方法來做到這一點,缺少像打開管道到“ps”的東西?

使用信號編號為0的os.kill()函數。如果進程pid存在,則調用將成功,否則將引發OSError異常:

try:
    os.kill(pid, 0)
    print("process exists")
except OSError:
    print("process does not exist")

我系統上kill(2)的文檔說:

kill ()函數將sig給出的信號發送到pid ,進程或一組進程。 Sig可以是在sigaction(2)中指定的信號之一,或者它可以是0,在這種情況下,執行錯誤檢查但實際上沒有發送信號。 這可用於檢查pid的有效性。

使用Greg提到的os.kill() ,但是意識到kill系統調用不測試進程是否存在,而是測試是否可以向進程發送kill。 一種失敗模式是,如果該過程不存在,而另一種失敗模式是您沒有權限將其殺死。 要區分,您必須檢查異常:

try:
   os.kill(pid, 0)
   print 'Process exists and we can kill it'
except OSError, e:
   if e.errno == 1:
      print 'Process exists, but we cannot kill it'
   else:
      raise

如果您知道您總是有權終止正在檢查的進程,那么這不是必需的,比如因為您以root身份運行,或者已知進程在與檢查它的進程相同的UID下運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM