2011-01-12 39 views
0

我需要創建一個函數,可以終止用戶擁有的所有進程並稍後啓動幾個進程。Python終止用戶擁有的所有進程

我的主要問題是我無法確定如何檢查是否所有進程都被終止,如果仍有正在運行的進程,要重試1-2次以殺死它們,然後返回錯誤。我只想使用python代碼。

這裏是我的代碼:

import os 
import pwd 


def pkill(user): 
    pids = [] 
    user_pids = [] 
    uid = pwd.getpwnam(user).pw_uid 
# get all PID 
    for i in os.listdir('/proc'): 
     if i.isdigit(): 
      pids.append(i) 
# test if PID is owned by user 
    for i in pids: 
     puid = os.stat(os.path.join('/proc', i)).st_uid 
     if puid == uid: 
      user_pids.append(i) 
# print len(user_pids) 
# check of PID still exist and kill it 
    for i in user_pids: 
     if os.path.exists(os.path.join('/proc',i)): 
      try: 
       os.kill(int(i), 15) 
      except OSError: 

謝謝

+0

您可能想要檢查`slay`的執行情況,[Source](http://hg.svartech.com/debian/slay/raw-file/tip/slay) – plundra 2011-01-13 11:27:23

回答

1

默認的方法來檢查,如果一個進程正在運行,在Linux中(它的POSIX也兼容),是使用kill -0 PID,所以在這裏你可以簡單地做一個os.kill但以0作爲信號,如果進程死了,它應該拋出一個異常,如果它活着,它不應該。

+0

謝謝您的提示。我會試一試。 – Ionut 2011-01-13 09:03:54

1

你不能做,你做同樣的事情,找到進程?該函數應該返回0 ..

相關問題