sigset_t set,oset;
sigemptyset(&set)
sigaddset(&set,SIGINT);//这个集合中只有这么一个信号存在
for(j=0;j<1000;j++)
{
	
	sigprocmask(SIG_BLOCK,&set,&oset);
	for(i=0;i<5;i++)
	{
		write(1,"*",1);
		sleep(1);
	}
	write(1,"\n",1);
	sigprocmask(SIG_SETMASK,&oset,NULL);
}
 

信号驱动程序。打印一行时停住等待,发一个信号,才会驱动程序跑一圈。

sigset_t set,oset;
sigemptyset(&set)
sigaddset(&set,SIGINT);//这个集合中只有这么一个信号存在
for(j=0;j<1000;j++)
{
	
	sigprocmask(SIG_BLOCK,&set,&oset);
	for(i=0;i<5;i++)
	{
		write(1,"*",1);
		sleep(1);
	}
	write(1,"\n",1);
	//解除阻塞后才能响应信号。下面两条指令不原子,使用sigsuspend()等待信号。
	sigprocmask(SIG_SETMASK,&oset,NULL);
	pause();
 
}
 

打印期间不响应信号。

sigsuspend(&oset);
/*
 
 
*/