2012-06-07 69 views
2

我有一個進程是通過subprocess.Popen()啓動的,它意味着無限期地運行。我遇到的問題是這個過程似乎在大約20秒後停止運行。果然,當我檢查top時,它表明該過程將要進入睡眠狀態。當我手動運行命令時,這不會發生。以子進程模塊啓動的進程進入休眠狀態

任何人都知道我可以如何阻止這種情況發生?

這是子電話:

aireplay = subprocess.Popen('aireplay-ng -3 -b ' + target.mac + ' ' + interface, 
          shell=True, stdout = subprocess.PIPE, stderr = DN) 

time.sleep(5) 
starttime = time.time() 
ivs = 0 
second = False 
print 'Sending deauth to generate arps...' 
send_deauth(target) 

while time.time() - starttime < 1200: 
    targets = parsecsvfile('crackattempt') 
    print 'Captured ' + str(ivs) + ' ivs.' 
    print aireplay.poll() 
    if len(targets[0]) > 0: 
     target = targets[0][0] 
     if ivs > 20000: 
      break 
     else : 
      ivs = int(target.ivs) 

    time.sleep(1) 
+0

如果您顯示一些代碼,人們將能夠爲您提供幫助。 – piokuc

+0

有關此過程正在執行的更多信息。睡覺前最後一件事是什麼?它持續20秒嗎?一直到代碼中的某個點?始終如一地嘗試使用特定的資源,數據結構等?這個過程是一個C程序,又一個Python,還是什麼?等等 –

+0

對不起,我在上面添加了子進程調用。該流程(airmon-ng)在路由器上執行ARP重放攻擊,即通過網卡來回發送和接收數據。它通常在10-30秒後發生。 – bananamana

回答

5

您管道子進程的輸出。當它的緩衝區已滿時它會休眠 - 你是否記得從子進程讀取stdout?

如果您不介意阻塞,或者從stdout文件描述符讀取,或者可能將stdout發送到/ dev/null,您可以使用communicate方法,因爲您似乎沒有使用它。

+0

謝謝,謝謝,謝謝!當緩衝區已滿時,我不知道它睡了。我只是發送標準輸出到/ dev/null,它的工作! – bananamana

相關問題