若调用进程在后面调用wait,则阻塞到它所有子进程都终止,此时返回-1 SA_NODEFER 当捕捉到此信号时,在执行其信号捕捉函数时,系统不自动阻塞此信号。 SA_ONESHOT/ SA_RESETHAND 当调用新的信号处理函数前,将此信号处理方式改为系统预设(SIG_DFL)的方式 SA_SIGINFO 此选项对信号处理程序提供了附加信息。
SA_SIGINFO: 信号处理函数接收额外的信息,如发送信号的进程ID等。 应用场景 自动重启系统调用:在编写需要高可靠性的网络服务时,可以使用SA_RESTART标志,以确保系统调用在被信号中断后能够自动重启。 控制僵尸进程:通过设置SA_NOCLDWAIT,可以避免产生僵尸进程,简化进程管理。
在开头我们看到 struct sigacton结构有又一个 void (*sa_sigaction)(int,siginfo_t *,void *); 字段 该字段是一个 替代的信号处理函数。 当我们没有使用 SA_SIGINFO 标志时,调用的是 sa_handler指定的信号处理函数。 当指定了该标志后,该标志对信号处理函数提供了附加的信息,一个指向siginfo结构的消息和一个...
SA_RESTART //此标志为on时,核心会自动重启信号中断的系统调用,否则返回EINTR错误值。 SA_NODEFER //当此标志为on时,在信号处理函数处置信号的时段中,核心程序不会把这个间隙中产生的信号阻塞。 SA_SIGINFO //此标志为on时,指定信号处理函数需要三个参数,所以应使用sa_sigaction替sa_handler。©...
// 这个值可以是0,表示使用sa_handler,也可以是SA_SIGINFO表示使用sa_sigaction int sa_flags; // 被废弃掉了 void (*sa_restorer)(void); }; */ #include <sys/time.h> #include <stdio.h> #include <stdlib.h> #include <signal.h> void myalarm(int num) { printf("捕捉到了信号的编号是:%d...
56defineSA_SIGINFO4/*Invokesignal-catchingfunctionwith 57threeargumentsinsteadofone.*/ 58ifdefined__USE_UNIX98||defined__USE_MISC 59defineSA_ONSTACK0x08000000/*Usesignalstackbyusing`sa_restorer.*/ 60endif 61ifdefined__USE_UNIX98||defined__USE_MISC||defined__USE_XOPEN2K8 ...
SA_SIGINFO: 信号处理函数接收额外的信息,如发送信号的进程ID等。 应用场景 自动重启系统调用:在编写需要高可靠性的网络服务时,可以使用 SA_RESTART 标志,以确保系统调用在被信号中断后能够自动重启。 控制僵尸进程:通过设置 SA_NOCLDWAIT,可以避免产生僵尸进程,简化进程管理。 信号处理函数的执行上下文:在需要特殊信号...