我试图从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;
}
我使用Ubuntu 11.10。 我编译程序用gcc,然后运行的a.out在书中指出。
$。/ a.out的&[1] + 1345
$杀-USR1 1345
但没有输出打印。 该计划一直在backgound运行,我要杀死它。
其他的事情我已经尝试:
试图处理SIGINT,看是否在后台运行的程序导致的问题。 仍然没有输出。
下载的FreeBSD的最新版本,并试图在其上的相同程序,但是具有同样的问题。
我把printf语句设定信号处理程序之前:
int main(){ printf("printf is working..."); //exit(0); if(signal(SIGUSR1, handler) == SIG_ERR) ...
当出口()被注释,没有输出。 当我去掉它,输出被打印。
请告诉我,我在做什么错呢?
PS:不建议使用的sigaction()。 我学习的Unix编程,没有构建任何实际应用。