首页 > 解决方案 > 为什么我不能在 POSIX 信号处理中使用 I/O?

问题描述

我最近在书上的 chp 5.9 中的 unp() 中阅读了代码,在处理僵尸时,作者使用

信号(SIGCHLD,sig_chld);

此外,在 sig_chld 内部,代码如下:

void sig_chld(int signo){
    pid_t pid;
    int stat;
    pid = wait(&stat);
    printf("child %d terminated\",pid); 
    return;
}

这个我试过了,也成功处理了僵尸,但是函数printf不能正常工作。为什么?如果需要更多信息,请发表评论。谢谢!!!

标签: cunixnetwork-programming

解决方案


在信号处理程序中只能使用异步信号安全函数。请参阅man signal-safety中此类功能的说明和列表。


推荐阅读