Baa*_*arn 8 shell sleep background-process
我刚刚问了一个关于将进程分叉到后台睡眠的问题。
我自己想出的符号是这样的:
sleep 10 && echo "hello world" &
Run Code Online (Sandbox Code Playgroud)
这个对不同问题的回答使用了不同的格式。
( sleep 10 ; echo "hello world" ) &
Run Code Online (Sandbox Code Playgroud)
我知道&&
只有在第一个进程返回 true 时才允许第二个进程启动。睡眠会失败吗?是否存在我应该更喜欢其中一种的情况?
Chr*_*own 12
如果在执行期间终止睡眠,则睡眠可能会失败:
$ sleep 2
$ echo "$?"
0
$ sleep 2
^C
$ echo "$?"
130
Run Code Online (Sandbox Code Playgroud)
由于sleep是外部可执行文件,所以也可以想象fork或exec调用可能会失败,这也会导致bash产生>0的错误代码。
a; b
总是在第一个命令之后运行第二个命令,而a && b
只有在第一个命令成功时才运行第二个命令,即只有当第一个命令返回状态 0 时。
sleep
总是返回状态 0,除非它被信号杀死,在这种情况下,状态是 128 + 信号编号。(如果sleep
命令不存在或程序由于缺乏资源而无法启动,则状态也可以是 126 或 127 ,但您不太可能遇到这些情况。)
因此,如果睡眠中断,您应该使用;
或&&
取决于您想要发生的情况:
sleep 10; echo hello
10 秒后打印消息(如果sleep
被信号杀死则更少);sleep 10 && echo hello
10 秒后打印消息,但如果sleep
被信号杀死,则不打印任何内容。