我是系统管理员,我被要求运行linux脚本来清理系统。
命令是这样的:
perl script.pl > output.log &
所以这个命令以&
符号结尾,它有什么特别的意义吗?
我对shell有基本的了解,但我以前从未见过这个。
答案 0 :(得分:113)
&
使命令在后台运行。
来自man bash
:
如果命令由控制操作员& 终止,则为shell 在子shell中在后台执行命令。外壳确实如此 不要等待命令完成,并且 返回状态为0。
答案 1 :(得分:10)
此外,您可以使用“&”签名通过一(1)个ssh连接运行许多进程,以保持最少数量的终端。例如,我有一个进程侦听消息以提取文件,第二个进程侦听消息以上传文件:使用“&”我可以在一个终端中运行这两种服务,通过单个ssh连接到我的服务器。
*****我刚刚意识到这些过程贯穿“&” ssh会话结束后也将“活着”!如果与服务器的连接中断,则非常整洁且有用**
答案 2 :(得分:5)
当没有被告知时,命令接管前台。你只有一个"前景"进程在单个shell会话中运行。 & symbol指示命令在后台进程中运行,并立即返回命令行以获取其他命令。
sh my_script.sh &
后台进程在shell会话关闭后不保持活动状态。 SIGHUP终止所有正在运行的进程。默认情况下无论如何。如果您的命令长时间运行或无限期运行(即:微服务),您需要将其与nohup一起使用,以便在断开与会话的连接后它仍然运行:
nohup sh my_script.sh &
编辑:关于后台进程的关闭似乎有一个灰色区域&用来。请注意,shell 可能会关闭您的进程,具体取决于您的操作系统和本地配置(特别是在CENTOS / RHEL上): https://serverfault.com/a/117157
答案 3 :(得分:0)
我不确定,但是我正在读一本书,我得到的是程序需要处理其信号(如按CTRL-C时)。现在,程序可以使用SIG_IGN忽略所有信号,或者使用SIG_DFL恢复默认操作。现在,如果您执行-$命令& 然后,此作为后台进程运行的进程将忽略所有将要发生的信号。对于前台进程,不会忽略这些信号。