来自:http://www.utdallas.edu/~kcooper/teaching/5375/fall08/Tutorial8/tutorial8.htm
(“C程序中的bash睡眠和睡眠的区别”一节):
bash睡眠命令和C程序的睡眠功能之间有很大的区别。C程序的睡眠函数是一个简单的函数调用。调用时,它将CPU分配给操作系统,以便调度其他需要CPU的进程。然后,在指定的秒数之后,称为睡眠的进程再次开始工作。 睡眠命令bash的工作方式不同。当调用此命令时,它会创建自己的子进程。它运行指定的秒数,然后退出到调用进程。
发布于 2012-07-21 21:13:11
为什么巴什睡得这么复杂?(为什么巴什睡眠是通过叉子实现的?
因为bash就是这样做的,所以它运行程序(在unixes上通过/exec()执行)--它只是碰巧有人编写了一个程序,/bin/sleep,它只是睡眠了指定的秒数。
为什么巴什睡眠不能像C睡眠那样?
如果有人将睡眠作为一个内置的命令/函数来实现,但还没有人这样做的话,它是可以的,而且它的好处可能是不值得的。
发布于 2012-07-21 21:09:35
我认为这些信息只是误导。如果sleep是由shell调用的外部程序(/bin/sleep),那么所有额外的工作都是调用外部程序;睡眠程序本身只调用睡眠函数。没有理由一个shell不能为只调用sleep函数而不分一个新进程的sleep命令提供内置的内容;但是,其好处最多也是值得怀疑的。由于标准的sleep命令总是至少休眠1秒,并且启动外部程序的开销是微秒左右,所以我认为它对性能没有任何帮助。
发布于 2012-07-21 21:55:24
因为在执行外部命令时,您可以用自己的睡眠(例如,在/bin/sleep中)替换“睡眠”(默认为“$HOME/bin/sleep”)--使用简单的路径更改.
外部命令=自由。
正如@nos已经告诉我们的那样: bash正在执行设计好的->执行程序。
https://stackoverflow.com/questions/11595812
复制相似问题