从子进程模块开始的进程进入休眠状态

时间:2012-06-07 23:04:38

标签: python linux subprocess

我有一个通过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)

1 个答案:

答案 0 :(得分:5)

您正在管道子流程的输出。当缓冲区已满时它会休眠 - 你还记得从子进程中读取stdout吗?

你可以使用communicate方法,如果你不介意它阻塞,或从stdout文件描述符读取,或者可能将stdout发送到/ dev / null,因为你似乎没有使用它。