
正文
linux命令睡眠5秒 linux命令 sleep
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
在linux下,想用sleep函数实现延时五秒,应该怎么设参数?
使用权限 : 所有使用者
使用方式 : sleep [--help] [--version] number[smhd]
说明 : sleep 可以用来将目前动作延迟一段时间
参数说明 :
--help : 显示辅助讯息
--version : 显示版本编号
number : 时间长度,后面可接 s、m、h 或 d
其中 s 为秒,m 为 分钟,h 为小时,d 为日数
例子 :
显示目前时间后延迟 1 分钟,之后再次显示时间 :
date;sleep 1m;date
这个命令更多应用于shell脚本编程里和程序里
如下面的一段程序:
应用程序:
复制代码
代码如下:
#include syswait.h
usleep(n) //n微秒
Sleep(n)//n毫秒
sleep(n)//n秒
驱动程序:
#include linux/delay.h
mdelay(n) //milliseconds 其实现
#ifdef notdef
#define mdelay(n) (\
{unsigned long msec=(n); while (msec--) udelay(1000);})
#else
#define mdelay(n) (\
(__builtin_constant_p(n) (n)=MAX_UDELAY_MS) ? udelay((n)*1000) : \
({unsigned long msec=(n); while (msec--) udelay(1000);}))
#endif
调用asm/delay.h的udelay,udelay应该是纳秒级的延时
Dos:
sleep(1); //停留1秒
delay(100); //停留100毫秒
Windows:
Sleep(100); //停留100毫秒
Linux:
sleep(1); //停留1秒
usleep(1000); //停留1毫秒
每一个平台不太一样,最好自己定义一套跨平台的宏进行控制
秒还是微秒?关于延时函数sleep()
因为要写一段代码,需要用到sleep()函数,在我印象中,sleep(10)好像是休眠10微秒,结果却是休眠了10秒(在Linux下)。觉得很奇怪,因为头儿也记得好像是微秒为单位的。所以就查了一下。
原来linux下的sleep函数原型为:
unsigned int sleep(unsigned int seconds);
而MFC中的Sleep函数原型为:
void Sleep(DWORD dwMilliseconds);
也就是说,Linux下(使用的gcc的库),sleep()函数是以秒为单位的,sleep(1);就是休眠1秒。而MFC下的sleep()函数是以微秒为单位的,sleep(1000);才是休眠1秒。原来如此啊。而如果在Linux下也用微妙为单位休眠,可以使用线程休眠函数:void usleep(unsigned long usec);当然,使用的时候别忘记#include system.h哦。
另外值得一提的是,linux下还有个delay()函数,原型为extern void delay(unsigned int msec);它可以延时msec*4毫秒,也就是如果想延时一秒钟的话,可以这么用 delay(250);
相关问答
Q1: Linux内核睡眠唤醒调试
本文基于 RockPI 4A 单板 Debian 系统 Linux4.4 内核介绍下睡眠唤醒( suspend/resume )的一些调试方法。
1、关闭串口睡眠
在Linux内核睡眠过程中,会先调用 suspend_console() 函数使串口进入睡眠状态,这样会导致后续设备驱动的睡眠过程不可见。可以在boot启动参数中增加 no_console_suspend 参数,显示设备驱动睡眠日志。
2、修改串口日志等级
修改串口日志打印等级,显示更多调试信息。
3、打开设备睡眠唤醒时间
设置 pm_print_times 参数,可以显示设备驱动睡眠唤醒时间,方便调试时查看哪个函数处理占用时间过长。
在调试Linux内核睡眠唤醒功能时,可以使用 RTC 做唤醒源,在系统睡眠5秒后,自动唤醒系统。
在 arch/arm64/configs/rockchip_linux_defconfig 文件中配置宏 CONFIG_PM_TEST_SUSPEND 。
唤醒日志如下:
Q2: shutdown多少分钟还是多少秒关机 Linux
shutdown命令中-t选项后面的值并不是关机时间,而是向进程发送警告信号和关闭信号的间隔时间。
例如命令:shutdown -t 5 5,第一个5表示的是向进程发送警告信号和关闭信号的间隔时间为5秒,但是系统关闭将在5分钟后。
Q3: Linux中的进程问题,以及exit(0); 和sleep(5);
俺跟linux命令睡眠5秒你解释一下:
fork是copy一个跟当前进程一模一样linux命令睡眠5秒的进程,包括当前进程linux命令睡眠5秒的所有状态(有特殊设置就不会拷贝,如文件标识)。子进程如果不设置新的执行程序,会继续执行fork之后的代码,注意前面提过的copy跟父进程一模一样的代码。
pid==0代表是子进程,因此子进程会执行这段代码:
if(pid==0)
{
printf("child!!!\n");
//这里会造成子进程的主线程,main执行线程,阻塞5秒
sleep(5);
exit(0);
}
pid 0 代表是父进程,因此父进程继续执行的代码为:
if(pid0)
{
//此处必须等待子进程结束,子进程调用exit(0),时会通知父进程继续执行
//属于进程间通讯、同步的一个手段之一。那子进程等待5秒被唤醒,执行exit(0)
//父进程收到通知,获取到子进程的退出状态,继续就会printf,基本也就是等待了5秒
//然后父进程return 0 等价于exit(0)正常结束
wait(NULL);//不这样写,父进程直接结束可能会产生僵尸进程,也可能变成孤儿进程由
//由init进程领养,并正确结束。通用的做法必须wait。根据操作系统以及版本不同处理
//方式可能不一样,如aix可能就会有僵尸进程产生
printf("father!!!\n");
}
Q4: ubuntu linux 的问题, ubuntu16.04 关机时(图形界面关机),
编辑/etc/default/grub,设置GRUB_CMDLINE_LINUX_DEFAULT="quiet splash text" 保存后执行sudo update-grub
Q5: 关于linux中的pause()函数
pause函数使调用进程挂起直至捕捉到一个信号。
#include
int
pause(void);
返回:-1,errno设置为EINTR
只有执行了一个信号处理程序并从其返回时,pause才返回。
/*************************************
使用alarm函数定时,然后通过pause()等待alarm函数的信号。
1:使用alarm函数的时候要注意alarm函数的覆盖性,即在一个进程中采用一次alarm函数则该进程之前的alarm函数将失效。
2:pause函数为将进程挂起,然后等待信号。
3:因为alarm函数在定时器到点的时候产生的信号默认为让该进程退出。因此本代码运行5秒然后直接退出,终端不会输出printf中的语句。
tips:挂起和阻塞的区别为,挂起是进程主动行为,阻塞是进程的被动行为。
*************************************/
#include
#include
#include
int
main(int
argc,char
*argv[])
{
int
ret;
ret=alarm(5);
pause();
printf("will
this
be
printed?\n");
}
#include
#include
#include
int
main()
{
int
ret;
ret=alarm(5);
pause();
printf("I
have
been
waken
up.\n",ret);
}
linux命令睡眠5秒的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux命令 sleep、linux命令睡眠5秒的信息别忘了在本站进行查找喔。







