求大神分析一段Linux进程的小代码

.千山. 2013-11-19 04:20:59
看第一次输入
,感觉定时器已经打破了pause函数造成的挂起状态,然而为啥一下子输出
“Would you want to quit? alarm!alarm! //①
Would you want to quit?”
然后五秒后又出现定时信号的处理信息:alarm!alarm!
①处的,那个getchar(),根本没有接受字符啊!! 而且为何那三句是同时出现!!!


#include<stdlib.h>
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<sys/time.h>
void handle(int signal)
{
switch(signal)
{
case SIGALRM:
printf("alarm! alarm! \a\a\a\a\a\a\a\n");break;
case SIGABRT:
printf("inabnormally quit!\n");break;
case SIGINT:
printf("Catch Signal : %d\n",signal);break;
}
}

int main()
{
printf("Current process ID is: %d\n",getpid());
signal(SIGINT,handle);
signal(SIGALRM,handle);
signal(SIGABRT,handle);
int time=5;
while(1)
{
alarm(time);
printf("would want to quit ?");
if(getchar()=='y') abort();
else pause();
};
return 0;
}
...全文
181 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shucheng36 2013-11-23
  • 打赏
  • 举报
回复
明确两点: 1.标准输出默认是有缓冲的; 2.信号处理函数要调用异步信号安全函数(Async-signal-safe functions),哪些函数是async-signal-safe的,可参考man 7 singal里的描述。
加勒比海带_OS 2013-11-22
  • 打赏
  • 举报
回复
我新手。不知道阿

18,773

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧