Linux下的sleep函数 要用的话得需要#include unistd.h
10年积累的网站设计制作、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有南溪免费网站建设让你可以放心的选择与我们合作。
sleep把进程的运行状态改为睡眠,将其从系统可执行队列去掉,这样系统就不会调度到该进程,不会分配CPU时间片,同时根据该进程的睡眠时间,将进程挂入相应的定时器队列中。
同时内核维持一个定时器队列,每一次时钟中断处理,都把当前到期的队列中的进程唤醒,加入到可运行进程队列中。 同时对所有挂入定时器队列中的进程时间值减1。
参考代码:
#includestdio.h
#includeunistd.h
int main()
{
int sec=0,
usec=0;
while(1)
{
printf("sec = %d \n",++sec);
sleep(1);
printf("usec = %d \n",++usec);
usleep(1000000);
}
return 0;
}
扩展资料:
在Linux下,sleep中的“s”不大写
sleep()单位为秒,usleep()里面的单位是微秒。在内核中,sleep的实现是由pause函数和alarm函数两个实现的。
特别注意在Codeblocks环境下是无法使用sleep函数的,因为在windows上Codeblocks采用mingw(Gnu在Window环境下的编译器,可以充分使用WindowsApi)作为编译器,而在stdlib.h中sleep的说明如下:_CRTIMP void __cdecl __MINGW_NOTHROW _sleep (unsigned long) __MINGW_ATTRIB_DEPRECATED;可以认为mingw舍弃了sleep函数,建议用Sleep实现sleep。
参考资料来源:百度百科-Sleep函数
sleep,即睡眠的意思,在Linux系统中,sleep命令主要用来延迟shell脚本的时间,也可使用于Windows系统中,下面小编针对sleep命令在Linux系统中的用法做个详细介绍,并为大家区别下Linux
sleep和Windows
sleep命令的用法。
linux
sleep
命令用来睡眠一段时间,sleep
可以用来将目前动作延迟一段时间。时间的单位有:秒(s),分钟(m),小时(h),天(d)
用法如下:
sleep
Number(suffix)
默认单位是秒(s)
sleep
1
==
sleep
1s
sleep
0.01
查看版本
linux
sleep
与
windows
sleep的区别
在linux里,sleep
的单位是秒,也就是sleep
1000就是睡眠了1000
秒,而在windows中,如果调用sleep函数单位是毫秒,sleep(1000)则是睡眠了1秒。
上面就是Linux使用sleep命令的方法介绍了,从本文的介绍中可以看出,sleep在Linux和Windows系统的区别主要表现在单位上,但用法并无太大差别。
linux shell 中的sleep命令
在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小时)
sleep 1 睡眠1秒
sleep 1s 睡眠1秒
sleep 1m 睡眠1分
sleep 1h 睡眠1小时
sleep命令
常用工具命令 sleep命令暂停指定的时间。
语法
sleep(参数)
参数
时间:指定要暂停时间的长度。
时间长度,后面可接 s、m、h 或 d,其中 s 为秒,m 为 分钟,h 为小时,d 为日数。 实例 有时在写一些以循环方式运行的监控脚本,设置时间间隔是必不可少的,下面是一个Shell进度条的脚本演示在脚本中生成延时。
#!/bin/bash
b='' for ((i=0;$i=100;i++)) do printf "Progress:[%-100s]%d%%\r" $b $i sleep 0.1 b=#$b done
sleep函数: #include unistd.h unsigned int sleep(unsigned int seconds); 此函数使调用进程被挂起,直到满足以下条件之一: 1)已经过了seconds所指定的墙上时钟时间 2)调用进程捕捉到一个信号并从信号处理程序返回 注:由于其他系统活动,实际返回时间比所要求的会迟一些,像alarm一样。 sleep的返回值: 1)在上述第一种情形中,返回值是0 2)当由于捕捉到某个信号sleep提前返回时,返回值是未睡够的时间(所要求的时间减去实际休眠时间)看看下面的例子,猜猜sleep()的返回值是多少 1 #include stdio.h 2 #include time.h 3 #include signal.h 4 5 #define DIAPAUSE 30 //sleep time 30s 6 #define TIMEOUT 5 7 8 void sigalrm(int signo); 9 10 int main() 11 { 12 struct sigaction sa; 13 14 sa.sa_handler = sigalrm; 15 sa.sa_flags = 0; 16 sigemptyset(sa.sa_mask); 17 if(sigaction(SIGALRM, sa, NULL) 0) 18 { 19 printf("sigaction error!\n"); 20 return; 21 } 22 23 while(1) 24 { 25 printf("alarm(TIMEOUT)...\n"); 26 alarm(TIMEOUT); 27 printf("...\n"); 28 printf("sleep(DIAPAUSE) == %d\n", sleep(DIAPAUSE)); 29 } 30 31 return 0; 32 } 33 34 void sigalrm(int signo) 35 { 36 printf("timeout...\n"); 37 return; 38 } sleep函数的返回值是25。 如果将TIMEOUT的值改为大于DIAPAUSE的值,如50的话,sleep函数在睡够了DIAPAUSE后就会返回,返回值为0。 如果我们即需要alarm又需要sleep一个预订的事件怎么办?如上面的例子,我想在...后再sleep 30s然后再进入循环。这在socket通讯过程中,在设置超时的时候可能会用到。 注意到alarm函数。 #include unistd.h unsigned int alarm(unsigned int senconds); 使用alarm函数可以设置一个计时器,在将来某个指定的时间该计时器会超时。当计时器超时时,产生SIGALARM信号。如果不捕捉或不忽略此信号,则其默认动作是终止调用该alarm函数的进程。 每个进程只能有一个闹钟时钟,如果在调用alarm时,已经为该进程设置过闹钟时钟,而且它还没有超时,则将该闹钟时钟的余留值作为本次alarm函数调用的返回值。以前登记的闹钟时钟将被新值代替。 如果有以前为进程登记的尚未超过的闹钟时钟,而且本次调用的seconds为0,则取消以前的闹钟时钟,其余留值仍作为alarm的返回值。 (以上这几段话摘自《unix环境高级编程》)。 所以在while循环的printf("...\n");后面添加一句alarm(0);就可以满足我的要求,即在...后再sleep 30s然后再进入循环。
1、首先打开linux虚拟机,运行虚拟机,在虚拟机中打开明令行。
2、其次使用killall通过程序的名字,来杀死进程。
3、最后输入命令就可以在原来的tty上杀死sleep了。