OSError: [Errno 24] when multithreading pwntools

OSError: [Errno 24] when multithreading pwntools

我正在创建一个脚本来启动一些线程,运行 二进制文件的输入。用法是python3 script.py binary input.txt。这是遇到此错误的可重现片段:

from pwn import *
import threading

inputFile = ""
try:
    inputFile = open(sys.argv[2], 'r')
    inputStr = inputFile.read().strip()
    inputFile.close()
except OSError:
    sys.exit()

def run(testStr) :
    p = process("./"+sys.argv[1])
    p.sendline(testStr)
    p.shutdown()
    return p.poll(block = True)

def opens() :
    while True:
        run(inputStr)
        
for i in range(0,10):
    thread = threading.Thread(target = opens)
    thread.start()

经过5秒左右的运行时间,我运行进入这个错误,还有错误:out of pty devices。 我 运行宁 ubuntu 20.04.

原来 pwntools 进程 API 没有关闭 stderr 或 stdout,所以在从 运行 返回之前关闭它们,问题就解决了。