其他几个发信号的函数
raise abort;
重点要掌握alarm信号和settimer函数
alarm函数
用于设置定时器;在指定seconds后,内核会给当前进程发送14)SIGALRM信号,进程收到该信号,默认动作是终止进程。
每个进程有且只有唯一一个定时器。(重点)
返回值:上一次闹钟剩余的时间
常用:alarm(0)用于取消定时器(重置闹钟),返回久闹钟剩余的时间。
alarm(5)->3s -> alarm(4) ps:返回2 -> 5s ->alarm(5) ps:这个时候返回0 ->alarm(0) ps:返回5.
注意:定时和进程状态无关(自然定时法)! 就绪、运行、挂起(阻塞、暂停)、终止、僵尸...无论进程处于何种状态,alarm都计时。
练习:编写程序,测试1s中,能数多少个函数。
- #include
- #include
-
- int main(void)
- {
- int i;
- alarm(1);
- for (i =0; ;i++)
- {
- printf("%d\n",i);
- }
- return 0;
- }
执行结果:
使用time命令查看程序执行的时间。 程序运行的瓶颈在于IO,优化程序,首选优化IO.
实际执行的时间 = 系统时间 + 用户时间 + 等待时间
real:程序实际执行的时间
user: 表示程序运行在用户空间的消耗的时间。
sys: 表示程序运行在内核空间的消耗的时间。
可以发现 user + sys 不等于 1s;只有0.3s左右,其他的0.7s是等待时间。
程序运行的瓶颈在于IO,优化程序,首选IO.
- ubuntu@ubuntu:~/code/test$ ./a.out > out
- Alarm clock
- ubuntu@ubuntu:~/code/test$ vim out
执行结果:
alarm 函数:
定时发送SIGALRM给当前的进程。
- SYNOPSIS
- #include
-
- unsigned int alarm(unsigned int seconds);
seconds: 定时秒数;
返回值:上一次定时剩余时间;