a)SIGIGN:忽略该信号 b) SIGDFL:执行系统默认动作 c) 处理函数名:自定义信号处理函数 2) samask:信号阻塞集,在信号处理函数执行过程中,临时屏蔽指定的信号。 3) saflags:用于指定信号处理的行为,通常设置为 0,表使用默认属性。它可以是一下值的“按位或”组合: Ø SARESTART:使被信号打断的系统调用自动重...
void ( *sa_handler)(int); //信号处理函数地址 sigset_t sa_mask; //一个调用信号捕捉函数之前要加到进程信号屏蔽字中的信号集 int sa_flags; //信号处理选项 void (*sa_sigaction)(int,siginfo_t *,void *); } 对于sigaction 函数本身我们不做多介绍。我们重点是在 sa_flags 的不同值的情况下,siga...
// getchar(); // 使用 getchar() 函数阻塞进程时,使用 sigaction 处理信号返回后,若不设置 sa_flags 为 SA_RESTART,则进程终止。 while(1); return 0; } 在执行while(1) 类似循环时,使用 sigaction 捕捉信号返回后,循环继续执行,如果使用 getchar() 阻塞进程时,程序捕捉到信号并返回,程序会中止,可设置...
structsigaction{void(*sa_handler)(int);// 信号处理函数指针void(*sa_sigaction)(int,siginfo_t*,void*);// 信号处理函数指针(扩展)sigset_tsa_mask;// 在处理该信号时要阻塞的信号集intsa_flags;// 修改信号行为的选项void(*sa_restorer)(void);// 恢复函数,已废弃}; sa_flags的常见选项 SA_RESTART:...
③ sa_flags:通常设置为0,表使用默认属性:为0的时候,可以屏蔽正在处理的信号(若在处理2号信号时又有2号信号,则此时传来的2号信号会被屏蔽)。 #include <stdlib.h>#include<stdio.h>#include<signal.h>voidfunc(intsignal) { printf("%d号信号被捕捉。\n", signal); ...
void(*sa_handler)(int); void(*sa_sigaction)(int,siginfo_t *,void *); sigset_tsa_mask; intsa_flags; } siginfo_t在linux2.6.39/include/asm-generic/siginfo.h中实现: sa_flags的取值如下表,取0表示选用所有默认选项。 SA_NOCLDSTOP:用于表示信号SIGCHLD,当子进程被中断时,不产生此信号,当且仅当...
返回0 成功,-1 失败 1.2 struct sigaction 结构体 structsigaction{ void(*sa_handler)(int); void(*sa_sigaction)(int,siginfo_t*,void*); sigset_tsa_mask; intsa_flags; void(*sa_restorer)(void); }; 1. 2. 3. 4. 5. 6. 7. sa_handler : 不带附加参数的信号处理函数指针 ...
sa.sa_flags = 0;// 设置信号处理程序 sigaction(SIGINT, &sa, NULL);// 无限循环,等待信号 while (true){ sleep(1);} return 0;} 上述代码中,我们定义了一个名为signalHandler的函数作为信号处理程序。在主函数中,我们首先创建了一个struct sigaction结构体,并设置其成员sa_handler为我们...
sa_mask,信号屏蔽集,可以通过函数sigemptyset/sigaddset等来清空和增加需要屏蔽的信号,上面代码中,对信号SIGINT处理时,如果来信号SIGQUIT,其将被屏蔽,但是如果在处理SIGQUIT,来了SIGINT,则首先处理SIGINT,然后接着处理SIGQUIT。 sa_flags如果取值为0,则表示默认行为。还可以取如下俩值,但是我没觉得这俩值有啥用。
sa_flags:用于设置一些标志位,如SA_RESTART表示在信号处理函数返回后自动重启被中断的系统调用。 sa_restorer:已废弃的字段,现在不再使用。 (3)返回值 sigaction()函数返回值为0表示操作成功,-1表示出现了错误。如果发生错误,可以通过errno变量获取错误码。常见的错误码包括: ...