我有两个脚本:
第一个('Reader')从命名管道读取数据,第二个('Writer')将数据写入命名管道。我从守护进程运行'Writer'(守护进程是用双叉机制创建的)。如果'Writer'崩溃,我想在'Reader'中打印一条关于它的消息。请参阅以下Python代码('Reader'):
pipe = open(pipe_path, 'r')
while True:
data = pipe.readline()
if not data:
print('Alarm')
break
但是当'Writer'崩溃时,'Reader'会停留在下一行:
data = pipe.readline()
但是,如果我从终端运行'Writer'一切正常(报警消息是在管道中没有数据时打印)。如果我打开管道,一切正常:
os.open(pipe_path, os.O_RDONLY | os.O_NONBLOCK)
但是这种方法不适合我,因为我需要在'Writer'开始将数据写入管道时等待一段时间
为了不创建僵尸,我在守护进程中执行下一步:
def childHandler(signum, frame):
os.wait3(os.WNOHANG)
signal.signal(signal.SIGCHLD, zombieKiller)
如何防止“读者”卡住并正确处理来自子进程的信号?
答案 0 :(得分:1)
尝试在守护程序中使用它:
fdPipe = os.open(pipe_path, os.O_WRONLY | os.O_NONBLOCK)