【linux信号】sleep的用法

运行系统:ubuntu 11.04

编译环境:GCC

语言:C语言


根据所查资料:

sleep函数:
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
此函数使调用进程被挂起,直到满足以下条件之一:
1)已经过了seconds所指定的墙上时钟时间
2)调用进程捕捉到一个信号并从信号处理程序返回
注:由于其他系统活动,实际返回时间比所要求的会迟一些,像alarm一样。
sleep的返回值:
1)在上述第一种情形中,返回值是0
2)当由于捕捉到某个信号sleep提前返回时,返回值是未睡够的时间(所要求的时间减去实际休眠时间)


如果在调用sleep进程中(即睡眠时),捕捉到信号并进行处理,sleep暂停,信号处理程序执行完毕或return到sleep处时,sleep返回未睡够的时间,挂起状态结束。

看以下代码:

#include<unistd.h>
#include<signal.h>
#include<stdio.h>
#include<stdlib.h>

void handler()
{
    printf("in handler,handler will sleep 10s\n");
    sleep(10);
    printf("in handler,hello\n");
}

main()
{
    signal(SIGALRM,handler);
    printf("in main,process will sleep 5s\n");
    alarm(3);
    printf("in main,sleep left %ds\n",sleep(5));
}


运行状况是这样的:


in main, process will sleep 5s

(睡眠3秒)

in handler, handler will sleep 10s

(睡眠10秒)

in handler, hello

(没有睡眠)

in main, sleep left  2s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值