通过带恶魔化的命名管道读写数据
Reading and writing data via named pipe with demonization
我有两个脚本:
第一个 ('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)
如何防止'Reader'卡住并正确处理来自子进程的信号?
尝试在守护进程中使用它:
fdPipe = os.open(pipe_path, os.O_WRONLY | os.O_NONBLOCK)
我有两个脚本:
第一个 ('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)
如何防止'Reader'卡住并正确处理来自子进程的信号?
尝试在守护进程中使用它:
fdPipe = os.open(pipe_path, os.O_WRONLY | os.O_NONBLOCK)