c - 为什么我不能在 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不能正常工作。为什么?如果需要更多信息,请发表评论。谢谢!!!
解决方案
在信号处理程序中只能使用异步信号安全函数。请参阅man signal-safety中此类功能的说明和列表。
推荐阅读
- c# - 如何在打开和关闭弹出窗口后以编程方式滚动到 PageView WPF 中的 UI 元素
- c# - Visual stuido 2019的建议,背景是透明的
- python - scikitplot->IndexError:数组索引过多:数组是一维的,但有 2 个被索引
- html - 将鼠标悬停在图像上显示产品信息
- python - 切换到 Pygame 中的另一个窗口后,用户选择的按钮重置为默认值
- python - 使用 Python requests 包时如何避免很多请求被拒绝?
- android - 将新 ns 映射到旧 ns + Kotlin 找不到所需的 JDK 工具:flutter
- java - 覆盖基类的泛型方法
- typescript - 如何在类型化对象中允许未知字符串?
- android - 如何使用 kotlin 设置网格布局重力