【发布时间】:2016-11-05 17:41:55
【问题描述】:
我知道命令之间的“&”运算符意味着命令是同时执行的。但是,“command1 & command 2 &”中的“&”有什么作用?
【问题讨论】:
标签: shell unix command-line-arguments
我知道命令之间的“&”运算符意味着命令是同时执行的。但是,“command1 & command 2 &”中的“&”有什么作用?
【问题讨论】:
标签: shell unix command-line-arguments
ps1%> command1 & command2
在本例中,command1 从后台运行,而 command2 从前台运行。在命令 2 完成之前,您不会得到命令提示符。
ps1%> command1 & command2 &
在第二个示例中,command1 和 command2 都从后台运行,当它们都在运行时,会立即向您提供命令提示符。
要测试和感受它,您可以这样做:
ps1%> sleep 10 & sleep 4
[1] 8134
在本例中,您将看到后台命令的 PID(进程 ID),而“睡眠 4”命令在前台运行。
ps1%> sleep 10 & sleep 4 &
[1] 8139
[2] 8140
在第二个示例中,将显示其中两个,表示两个在后台运行,而您会立即返回提示。
【讨论】:
& 不是二元运算符(在两个命令之间),它是一元后缀运算符,即在一个命令之后,并指示 shell 在后台运行指定的命令。当&出现在两个命令之间时,可以省略正常的;分隔符,即将foo&; bar写成foo & bar。这种用法使& 看起来像一个二元运算符。
因此,command1 & command2 实际上等同于command1& ; command2,意思是“在后台运行 command1,然后运行 command2 并等待 command2 完成”。 command1 & command2 & 等价于command1& ; command2&,意思是“在后台同时运行command1 和command2,并立即恢复执行脚本(或返回提示符,如果是交互的)”。
由于至少有一个命令在后台,这两个命令实际上在两种情况下都是“并行”执行的。
【讨论】: