从子进程模块启动的进程进入睡眠状态



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

您正在管道传输子流程的输出。 当缓冲区已满时,它将休眠 - 您是否记得从子进程中读取标准输出?

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

最新更新