我正在Unix环境的Advanced Programming中尝试此程序。
#include
#include
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;
}
我正在使用Ubuntu 11.10。我用gcc编译程序,然后按照书中的说明运行a.out。
$。/ a.out&[1] + 1345
$ kill -USR1 1345
但是没有输出输出。该程序一直在后台运行,我必须杀死它。
我尝试过的其他方法:
尝试处理SIGINT以查看在后台运行程序是否引起问题。仍然没有输出。
下载了最新版的FreeBSD,并尝试了相同的程序,但是存在相同的问题。
我在设置信号处理程序之前放了一个printf语句:
int main(){
printf("printf is working...");
//exit(0);
if(signal(SIGUSR1, handler) == SIG_ERR)
...
注释exit()时,没有输出。当我取消注释时,将输出输出。
请告诉我我在做什么错了?
PS:不建议使用sigaction()。我正在学习Unix编程,而不是构建任何实际应用程序。