信号顺序:SIGPOLL 和 SIGCHLD

信号顺序:SIGPOLL 和 SIGCHLD

我生成一个子进程并使用管道连接到它。

我将管道配置为发送SIGPOLL可用的数据fcntl I_SETSIG

子进程通过管道发送一些数据,然后终止。

我可以确定SIGPOLL之前会收到吗SIGCHLD? (或者在这种情况下我可能只收到根本SIGCHLD没有的信号SIGPOLL?如果我收到两个信号,我可以确定它们的顺序吗?)

我在 FreeBSD 上使用 Perl,但这个问题扩展到所有 Unix 平台。

答案1

这个设计中写满了竞争条件。您无法确定信号是否会按顺序传递,甚至根本无法确定。如果您使用 Perl,那就会变得更加不确定。

重新设计,以便父母向孩子确认已收到数据。信号传递顺序和数量是一件不可靠的事情,要求便携式解决方案更是无望。

相关内容