通过带有妖魔化的命名管道读取和写入数据

时间:2015-10-20 14:34:00

标签: python unix subprocess daemon

我有两个脚本:
第一个('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)

如何防止“读者”卡住并正确处理来自子进程的信号?

1 个答案:

答案 0 :(得分:1)

尝试在守护程序中使用它:

fdPipe = os.open(pipe_path, os.O_WRONLY | os.O_NONBLOCK)