它出現在標準輸出文件描述符變得 「讀就緒」,當接收器崩潰:
$ gcc -Wall select-downstream-crash.c -o select-downstream-crash
$ gcc -Wall crash-in-five-seconds.c -o crash-in-five-seconds
$ ./select-downstream-crash | ./crash-in-five-seconds
... five seconds pass ...
stdout is ready for reading
Segmentation fault
選擇-下游crash.c
#include <err.h>
#include <stdio.h>
#include <sys/select.h>
#include <unistd.h>
int main(void)
{
fd_set readfds;
int rc;
FD_ZERO(&readfds);
FD_SET(STDOUT_FILENO, &readfds);
rc = select(STDOUT_FILENO + 1, &readfds, NULL, NULL, NULL);
if (rc < 0)
err(1, "select");
if (FD_ISSET(STDOUT_FILENO, &readfds))
fprintf(stderr, "stdout is ready for reading\n");
return 0;
}
碰撞在五-seconds.c
#include <stdio.h>
#include <unistd.h>
int main(void)
{
sleep(5);
putchar(*(char*)NULL);
return 0;
}
我在Linux上試過,但不知道它是否可以在其他地方使用。找到解釋這一觀察結果的文檔是很好的。
是否有必要立即知道下游進程崩潰的時間,還是隻有在下一次有東西寫入時才知道崩潰了就足夠了? – zwol
正如我在問題中提到的那樣,我想知道下游進程會更快崩潰,而不是下一次寫入(可能會在我的上下文中處於不確定的時間)。 –