c - 尽管使用了 signal() 函数,为什么 SIGUSR1 会终止我的子进程?
问题描述
我有以下代码:
void sig_handler(int sig) {
printf("Hello child\n");
}
int main()
{
pid_t child = fork();
if (child > 0)
{
printf("Hello parent\n");
kill(child, SIGUSR1);
}
else if (child == 0)
{
signal(SIGUSR1, sig_handler);
printf("In child\n");
}
else
{
printf("Error\n");
}
return 0;
}
我希望代码运行:
Hello parent
Hello child
In child
但是在父母发送后立即杀死孩子kill(child, SIGUSR1);
,结果只是:
Hello parent
我已经阅读了文档,默认操作SIGUSR1
是终止,但是,我已经实现了signal(SIGUSR1, sig_handler);
捕获的信号处理程序SIGUSR1
,那么为什么孩子仍然被杀死?
解决方案
我想说有两种可能性:要么子进程在主进程发送信号之前死亡,要么主进程在设置处理程序之前发送信号。
编辑:如果你只得到“你好父母”它不能是第一个。
推荐阅读
- firebase - Firebase 身份验证:uid 与 getToken(再次...)
- r - 为什么在没有“with=FALSE”参数的 data.table 中不尊重 qc()?
- sql-server - 求销售量排名前 5 位的类别的每个子类别的平均收入和总收入?
- linux - 停止 systemd 服务的交互式脚本
- mysql - MySQL 获取最近 7 天的预订,按 NameResource 分组
- c# - 是否可以在公共枚举 C# 中使用内部值?
- android - 如何修复compositeDisposable.addAll(jsonApi.getData()中的表达式未使用“this :: displayData”?
- reverse-proxy - 使用直接普通链接时创建反应应用代理
- .htaccess - nginx:如何使用个人密码保护下载链接
- mysql - 合并两个具有相同主键的表