Answers:
该&
引导外壳在后台运行的命令,即,它被分叉并在一个单独的子壳运行,作为作业,异步。
请注意,将&
输出(stdout和stderr)都仍将打印在屏幕上。如果你不想在屏幕上看到的任何输出,都重定向stdout
并stderr
以文件方式:
myscript > ~/myscript.log 2>&1 &
通常stderr
,/dev/null
如果您不担心稍后分析错误,则可能需要通过将其重定向到来丢弃它。
您甚至还可以在单独的子Shell中同时运行命令/脚本。例如
./script1 & ./script2 & ./script3 &
可以在完成以下命令之前将后台作业带回到命令行:
fg <job-number>
所述job-number
可以通过运行而获得
jobs
2>&1
重定向stderr
到stdout
。
stty tostop
如果后台作业尝试写入终端,则会导致后台作业被暂停。
使用时&
,该过程在后台运行。但是它的标准输出仍然是终端。
事实上,你可以运行ping 8.8.8.8 &
并find / -name '*test*' &
在同一时间(导致混合输出),但你可能无法运行ping 8.8.8.8
,并find / -name '*test*'
在同一时间在同一个外壳。
如果您不想看到任何东西,请使用ping 8.8.8.8 &> /dev/null &
。
此外,您可能想了解nohup
和disown
。
disown
不会阻止输出到终端。
/dev/null
如果有人想放弃输出而不是将其保存在某个地方,则可以将其用作重定向终端输出的文件。我2>&1
重定向stderr
到正确stdout
吗?也许您也想澄清一下...谢谢。