1

来自:http ://www.utdallas.edu/~kcooper/teaching/5375/fall08/Tutorial8/tutorial8.htm

(“C 程序中 bash sleep 和 sleep 的区别”一节):

bash sleep 命令和 C 程序的 sleep 函数的工作方式有很大的不同。C 程序的 sleep 函数是一个简单的函数调用。调用时,它会将 CPU 交给操作系统,以便它可以调度其他需要 CPU 的进程。然后在指定的秒数之后,调用睡眠的进程再次开始工作。

sleep 命令 bash 的工作方式不同。调用此命令时,它会创建自己的子进程。它运行指定的秒数,然后退出到调用进程。

  1. 为什么 bash 睡眠这么复杂?(为什么bash sleep是通过fork实现的?)
  2. 为什么 bash sleep 不能像 C sleep 一样?
4

4 回答 4

2

我认为这些信息只是误导。如果sleep是由shell调用的外部程序(/bin/sleep),那么所有额外的工作都是调用外部程序;睡眠程序本身只是调用睡眠函数。没有理由 shell 不能为sleep只调用sleep函数而不分叉新进程的命令提供内置命令。然而,这些好处充其量是值得怀疑的。由于标准sleep命令将始终休眠至少一秒钟,并且启动外部程序的开销约为微秒,因此我看不出它有任何帮助性能的方法。

于 2012-07-21T21:09:35.760 回答
2

为什么 bash 睡眠这么复杂?(为什么bash sleep是通过fork实现的?

因为这就是 bash 所做的,所以它运行程序(在 unix 上是通过 fork()/exec() 完成的)所以碰巧有人编写了一个程序,它只/bin/sleep休眠指定的秒数。

为什么 bash sleep 不能像 C sleep 一样?

如果有人将 sleep 实现为 bash 的内置命令/函数,但还没有人这样做,那么它可能会带来好处,而且可能不值得。

于 2012-07-21T21:13:11.283 回答
1

因为在执行外部命令时,您可以将“睡眠”(默认为/bin/sleep)替换为您自己的睡眠,例如 in $HOME/bin/sleep- 只需简单的 PATH 更改...

外部命令=自由。

正如@nos 已经告诉过的:bash 正在为设计的 -> 执行程序所做的事情。

于 2012-07-21T21:55:24.633 回答
0

那么 bash 只是为了执行其他程序或脚本。想想在后台模式下调用睡眠。Bash 应该执行脚本而不理解和实现其中的逻辑。行为是有道理的。

于 2012-07-22T15:38:39.707 回答