bash usleep 会阻塞吗?还是会将线程让给其他线程?

bash usleep 会阻塞吗?还是会将线程让给其他线程?

我知道 bash 中有一个 usleep 命令。这是“忙碌”睡眠还是“阻塞”睡眠?或者这会给其他进程腾出时间?

答案1

这可能实际上不属于 Server Fault(尽管我不确定它属于哪个站点),但无论如何这里有一个答案:

bash shell 没有内置usleep命令(也没有内置sleep命令)。 sleep是一个标准程序在 Unix 系统上,无论运行哪个 shell 都可以使用。 usleep似乎是由 RedHat 人员编写的程序,可能只存在于 RedHat 相关发行版(RHEL 及其衍生产品;Fedora)中。它似乎在 Debian 中不可用。

在任何情况下,sleep使用usleep标准sleep()usleep()系统调用,它们会暂停程序执行指定的时间[0](使它们“阻塞”),并且在睡眠期间不使用任何 CPU 时间(使它们不是“忙碌的”)。

[0] 由于内核调度程序的工作方式,实际上并不能保证时间量与请求的时间量完全一致。通常的保证是它将休眠至少请求的时间。对于整数持续时间来说这不是问题sleep(),因为方差将远小于一秒,但usleep()持续时间(和分数sleep()持续时间)可能最终不准确。

答案2

bash 中没有usleep命令。usleep: command not found在 bash 4.3.11 中,也没有在变更日志...

相关内容