signal在信号处理函数中不会屏蔽其他信号,会被其他信号打断:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <wait.h>
#include <memory.h>
void sig_handler(int signo)
{
if(signo == SIGUSR1)
{
printf("get SIGSR1\n");
}
if(signo == SIGUSR2)
{
printf("get SIGSR2\n");
}
if(signo == SIGTSTP)
{
printf("get SIGTSTP\n");
}
if(signo == SIGINT)
{
printf("get SIGINT\n");
int i = 0;
for(; i<10; i++)
{
printf("%d\n", i);
sleep(1);
}
}
}
int main()
{
if(signal(SIGINT, sig_handler) == SIG_ERR)
{
perror("signal error");
exit(0);
}
if(signal(SIGTSTP, sig_handler) == SIG_ERR)
{
perror("signal error");
exit(0);
}
printf("begin\n");
int i = 0;
for(; i<10; i++)
{
printf("%d\n", i);
sleep(1);
}