来自:http://www.utdallas.edu/~kcooper/teaching/5375/fall08/Tutorial8/tutorial8.htm
(“C程序中bash睡眠和睡眠之间的区别”一节):
bash sleep命令和C程序的睡眠功能之间的区别主要区别。 C程序的休眠功能是一个简单的函数调用。调用时,它会将CPU放弃到操作系统,以便它可以安排其他需要CPU的进程。然后在指定的秒数之后,调用sleep的进程再次开始工作。
sleep命令bash的工作方式不同。调用此命令时,它会创建自己的子进程。它运行指定的秒数,然后退出到调用进程。
答案 0 :(得分:2)
我认为这些信息只会产生误导。如果sleep
是shell调用的外部程序(/bin/sleep
),则所有额外的工作都是调用外部程序;睡眠程序本身只调用睡眠功能。 shell没有理由不为sleep
命令提供内置函数,只需调用sleep
函数而不需要新进程;然而,好处最多也是可疑的。由于标准sleep
命令将始终至少休眠一秒,并且启动外部程序的开销大约为微秒,我认为它没有任何方式可以帮助提高性能。
答案 1 :(得分:2)
为什么bash睡得那么复杂? (为什么通过分叉实现bash睡眠?
因为这就是bash的作用,它运行程序(在unix上通过fork()/ exec()完成)只是有人写了一个程序,/bin/sleep
只是睡了指定量的秒。
为什么bash睡眠不能像C睡眠一样?
如果有人将睡眠作为内置命令/功能进行打击,但是还没有人可以使用,而且可能的好处是不值得的。
答案 2 :(得分:1)
因为在执行外部命令时,您可以用自己的睡眠替换“睡眠”(默认为/bin/sleep
),例如在$HOME/bin/sleep
中 - 通过简单的PATH更改......
外部命令=自由。
正如@nos已经告诉过的那样:bash正在为所设计的目标做准备 - >执行程序。
答案 3 :(得分:0)
好吧bash只是为了执行其他程序或脚本。想一想在后台模式下调用睡眠。 Bash应该执行脚本而不理解并实现其中的逻辑。行为是合理的。