等待和睡眠的区别

32 浏览
0 Comments

等待和睡眠的区别

“wait”和“sleep”的区别是什么?

0
0 Comments

等待和睡眠之间的区别

在Shell脚本中,有两种常用的命令用于在程序执行过程中引入延迟:wait和sleep。尽管它们都可以实现延迟的效果,但它们的用法和功能有所不同。

wait是一个内置的BASH命令,用于等待指定的进程完成并返回其终止状态。它可以接受一个或多个参数,每个参数可以是进程ID或作业描述符。如果给定了作业描述符,则会等待该作业相关的所有进程。如果没有提供参数,则会等待当前活动的所有子进程,并且返回状态为零。如果参数指定了一个不存在的进程或作业,返回状态为127。否则,返回状态为最后一个等待的进程或作业的退出状态。

相比之下,sleep不是一个shell内置命令,而是一个工具,用于延迟指定的时间。它可以支持以不同的时间单位进行等待。GNU coreutils 8.4版本的man手册中描述了sleep命令的用法。它可以接受一个或多个参数,每个参数可以是一个数字后面跟着一个后缀。后缀可以是's'代表秒(默认),'m'代表分钟,'h'代表小时,'d'代表天。与大多数实现要求数字必须是整数不同,这里的数字可以是任意浮点数。当给定两个或更多参数时,sleep会按照这些值的总和来延迟时间。

问题的出现原因是因为wait和sleep在功能上有所重叠,但是它们的用法和语法不同。如果在脚本中使用错误的命令来实现延迟,可能会导致意想不到的错误或程序逻辑混乱。

为了解决这个问题,我们需要根据具体的需求选择合适的命令。如果需要等待指定的进程完成并获取其终止状态,可以使用wait命令。如果只是需要引入一个固定的延迟时间,可以使用sleep命令。正确选择命令可以确保脚本的正确执行和逻辑的清晰性。

0
0 Comments

在shell脚本中,sleep命令用于延迟给定的秒数。而wait命令则用于让shell等待指定的作业完成。

在给出的示例中,wait %1 %2命令会延迟shell的执行,直到两个子进程完成。如果没有其他后台进程,也可以简单地使用wait命令。但是,如果等待的进程不是shell的子进程,会出现错误消息,如-bash: wait: pid 1 is not a child of this shell,并返回退出码127。

这个问题已经存在了2年,没有人注意到。你是完全正确的,我会修改答案...

0
0 Comments

等待是为了等待一个进程完成;睡眠是为了睡眠一定的秒数。

wait 60 是为了等待作业60完成;sleep 60 是为了睡眠60秒。

wait 60 应该立即完成并显示错误信息;如果没有,则表示你做错了什么。

0