- 论坛徽章:
- 0
|
本帖最后由 fdl19881 于 2012-06-19 22:31 编辑
回复 5# tempname2
不可靠信号只是对不同的信号才排除,对相同信号会合并成一个(这就叫信号丢失)。想想sigpromask的作用。
可靠信号是完全支持排除的。
你也说了是老式系统才会每次响应信号后就后解除原来的信号处理程序。 那新式系统呢? 这个也就不能称为实时信号和非可靠信号的区别了。
自己运行下:
#include <signal.h>
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
void sig_handle(int signo)
{
char msg[] = "catch signal SIGUSR1\n";
if(signo == SIGUSR1)
write(STDOUT_FILENO , msg , strlen(msg));
}
int main(void)
{
pid_t pid;
int i;
printf("before fork:\n");
if((pid = fork()) < 0) {
perror("fork error");
exit(-1);
} else if(pid == 0) {
if(signal(SIGUSR1 , sig_handle) == SIG_ERR) {
perror("signal error");
_exit(-1);
}
while(1)
pause();
_exit(0);
}
sleep(1);
for(i = 0; i < 5 ; i++) {
kill(pid , SIGUSR1);
sleep(1);
}
kill(pid , SIGTERM);
if(wait(NULL) < 0) {
perror("wait error");
exit(-1);
}
exit(0);
}
|
|