我生成一个子进程并使用管道连接到它。
我将管道配置为发送SIGPOLL
可用的数据fcntl
I_SETSIG
。
子进程通过管道发送一些数据,然后终止。
我可以确定SIGPOLL
之前会收到吗SIGCHLD
? (或者在这种情况下我可能只收到根本SIGCHLD
没有的信号SIGPOLL
?如果我收到两个信号,我可以确定它们的顺序吗?)
我在 FreeBSD 上使用 Perl,但这个问题扩展到所有 Unix 平台。
答案1
这个设计中写满了竞争条件。您无法确定信号是否会按顺序传递,甚至根本无法确定。如果您使用 Perl,那就会变得更加不确定。
重新设计,以便父母向孩子确认已收到数据。信号传递顺序和数量是一件不可靠的事情,要求便携式解决方案更是无望。