我是在Unix环境下的高级编程中尝试这个程序的。
#include<stdio.h>
#include<signal.h>
static void handler(int sig){
if(sig == SIGUSR1)
printf("handled user1 signal");
else if(sig == SIGUSR2)
printf("handles user2 signal");
else
printf("unkown signal");
}
int main(){
if(signal(SIGUSR1, handler) == SIG_ERR)
printf("can't handle signal SIGUSR1");
if(signal(SIGUSR2, handler) == SIG_ERR)
printf("can't handle signal SIGUSR2");
for(;;)
pause();
return 0;
}我正在使用Ubuntu11.10。我和gcc一起编写了程序,然后按照书中的指示运行a.out。
$./a.out& 1+ 1345
$ kill -USR1 1345
但是没有打印输出。这个程序一直在后台运行,我得杀了它。
我尝试过的其他事情:
当exit()被注释时,就没有输出。当我取消注释时,输出将被打印出来。
请告诉我我做错了什么?
PS:不要建议使用sigaction()。我正在学习Unix编程,而不是构建任何实际的应用程序。
发布于 2012-08-27 09:47:36
printf的输出被缓冲。这意味着它被存储在内存中,直到刷新到输出。在printf中刷新文本的最好方法是用换行符结束文本。您还可以使用fflush函数手动刷新。
但是,应该提醒您,在信号处理程序中使用输出函数(如printf和fflush )并不安全。
https://stackoverflow.com/questions/12139609
复制相似问题