Unix环境编程:信号进程同步时出现../sysdeps/unix/sysv/linux/sigsuspend.c: No such file or dir

Daemon在路上 Daemon在路上 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在看了Unix编程第10章信号之后,自己动手使用信号实现父子进程同步,书上10-24程序中使用sigsuspend函数在子进程运行时,将父进程挂起,直到接收到子进程发来的信号SIGUSR1,测试时出现段错误,使用gdb查看bt信息:
(gdb) run test.c
Starting program: /home/fairy/Unix_Code/Chapter9/SecSolution/10-61 test.c

Program received signal SIGUSR1, User defined signal 1.
0x00007ffff7a427e6 in __GI___sigsuspend (set=0x602260 <waitmask>) at ../sysdeps/unix/sysv/linux/sigsuspend.c:30
30 ../sysdeps/unix/sysv/linux/sigsuspend.c: No such file or directory.
跟踪堆栈信息:
(gdb) bt
#0 0x00007ffff7a427e6 in __GI___sigsuspend (set=0x602260 <waitmask>) at ../sysdeps/unix/sysv/linux/sigsuspend.c:30
#1 0x000000000040160c in wait_child () at 10-61.c:156
#2 0x000000000040145c in main (argc=2, argv=0x7fffffffdcb8) at 10-61.c:76

得知是wait_child()函数中sigsuspend出现问题。
我的tell_wait()、tell_parent()、wait_child()函数如下:

sig_usr信号处理程序

119 static void sig_usr(int signo)
120 {
121 flag=1;
122 }
123

tell_wait()函数
125 void tell_wait(void)
126 {
127 signal(SIGUSR1,&sig_usr);
128 signal(SIGUSR2,&sig_usr);
129
130 sigemptyset(&oldmask);
131 sigemptyset(&newmask);
132 sigemptyset(&waitmask);
133
134 sigaddset(&newmask,SIGUSR1); //初始时屏蔽两个信号,父进程挂起时没有屏蔽
135 sigaddset(&newmask,SIGUSR2);
136
137 if(sigprocmask(SIG_BLOCK,&newmask,&oldmask)<0){
138 err_sys("获取当前信号屏蔽字失败!\n");
139 }
140


tell_parent()函数:
//通知父进程SIGUSR1
145 void tell_parent(pid_t pid)
146 {
147 kill(pid,SIGUSR1);
148 }


wait_child()函数:
//等待子进程运行结束
151 int wait_child(void)
152 {
153 //sigaddset(&waitmask,SIGUSR2);//屏蔽SIGUSR2
154 while(flag==0){
155 //pr_mask("父进程等待:");
156 if(sigsuspend(&waitmask)!=-1){
157 err_sys("sigsuspend error!\n");
158 }
159 }
160
161 parent_count++;
162 flag=0;
163
164 if(sigprocmask(SIG_SETMASK,&oldmask,NULL)==-1){
165 err_sys("恢复屏蔽字失败!\n");
166 }
167
168 return parent_count;
169 }


问题出现在sigsuspend函数这里,之前使用打印屏蔽字时可以正常使用,恳请各位大佬指点!!


...全文

相关推荐

成功解决fatal error: stdatomic.h: No such file or directory #include <stdatomic.h>

​ 成功解决fatal error: stdatomic.h: No such file or directory #include 目录 解决问题 解决思路 解决方法 解决问题 I llama.cpp build info: I UNAME_S: Linux I UNAME_P: x86_64 I UNAME_M: x86_64 I CFLAGS: -I. -Icommon -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -DND

一个处女座的程序猿

bash: /snap/bin/curl: No such file or directory 错误

bash: /snap/bin/curl: No such file or directory 错误

达子666

pip install出现fatal error: poppler/cpp/poppler-document.h: No such file or directory的解决方案

本文主要介绍了pip install出现fatal error: poppler/cpp/poppler-document.h: No such file or directory的解决方案,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 不同操作系统的解决方案

爱编程的喵喵

将JNI文件编译为SO文件中遇到的问题: fatal error: jni_md.h: No such file or directory

学习韦老师的安卓课程时,将JNI文件编译为SO文件遇到fatal error: jni_md.h: No such file or directory的问题。 刚开始我的java版本和老师的不同,编译时发生了错误 root@ubuntu:/home/topeet/Android-app/HAL_0001_LED# /usr/local/arm/4.4.1/bin/arm-linux-gcc -...

观天玉

【linux】error: stdio.h: No such file or directory

ubuntu 默认没有C和C++编译环境ubuntu 默认没有C和C++编译环境,新装的ubuntu,使用gcc编译时,会报错,找不到某某头文件等。在编译一个demo,如hello world时,会报错: error: stdio.h: No such file or directory安装C和C++编译环境sudo aptitude install build-essential 如果没有安装

郭老二
评论 3
收藏 已收藏
分享
返回顶部
Daemon在路上
Linux/Unix社区 23,224 成员 74,535 内容