当前位置: 技术问答>linux和unix
关于linux信号编程的问题
来源: 互联网 发布时间:2016-10-20
本文导语: linux下信号机制需要先安装信号,然后捕捉信号 #include #include #include void sig_alarm(){ printf("www.baidu.comn"); } int main(void){ printf("baidun"); signal(SIGALRM,sig_alarm); alarm(1); for(;;){} } signal(SIGALRM,sig_alarm);是安装...
linux下信号机制需要先安装信号,然后捕捉信号
signal(SIGALRM,sig_alarm);是安装信号的,用于捕捉SIGALRM信号,sig_alarm用于处理这个信号
alarm(1)在1秒钟后发出SIGALRM信号,可是问什么却不打印
www.baidu.com
呢
#include
#include
#include
void sig_alarm(){
printf("www.baidu.comn");
}
int main(void){
printf("baidun");
signal(SIGALRM,sig_alarm);
alarm(1);
for(;;){}
}
signal(SIGALRM,sig_alarm);是安装信号的,用于捕捉SIGALRM信号,sig_alarm用于处理这个信号
alarm(1)在1秒钟后发出SIGALRM信号,可是问什么却不打印
www.baidu.com
呢
|
你没有捕捉信号。知道不??
捕捉信号要用pause()
for(;;)
pause();
捕捉信号要用pause()
for(;;)
pause();
|
同意一楼的,我自己机上试没问题啊。
|
这就是缓存问题了,你可以加fflush()强制刷新的标准输出,你也可以加exit()来结束,eixt()结束的话,将缓存中的数据都刷新到标准输出。你可以试试、、、
|
这就是缓存问题了,你可以加fflush()强制刷新的标准输出,你也可以加exit()来结束,eixt()结束的话,将缓存中的数据都刷新到标准输出。你可以试试、、、
|
如果是这样的话确实是缓存问题
除非缓存满了或者程序结束要不是不会出来的
|
这里有2个问题。
第一,终端一般是行缓冲的。遇到'n'才输出。这点APUE详细解释了。
第二,貌似你信号处理函数原型不对呀。难道不应该是:
void sig_alarm(int signo);
吗?你编译的时候有报警吗?
|
[root@localhost ~]# ./a.out
baidu
www.baidu.com
可以阿...
baidu
www.baidu.com
可以阿...