什么是“&”在linux命令的末尾意味着什么?

时间:2012-11-12 05:37:23

标签: linux shell unix

我是系统管理员,我被要求运行linux脚本来清理系统。

命令是这样的:

perl script.pl > output.log &

所以这个命令以&符号结尾,它有什么特别的意义吗?

我对shell有基本的了解,但我以前从未见过这个。

4 个答案:

答案 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恢复默认操作。现在,如果您执行-$命令& 然后,此作为后台进程运行的进程将忽略所有将要发生的信号。对于前台进程,不会忽略这些信号。