[英]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.