linux命令末尾的"&"是什么意思?

Dud*_*ude 75 unix linux shell

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

命令是这样的:

perl script.pl > output.log &
Run Code Online (Sandbox Code Playgroud)

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

我有shell的基本知识,但我以前从未见过这个.

mga*_*aia 122

&使得在后台运行的命令.

来自man bash:

如果命令由控制操作符&终止,则shell在子shell中在后台执行命令.shell不等待命令完成,返回状态为0.


Zac*_*k S 10

此外,您可以使用"&"符号通过一(1)个ssh连接运行许多进程,以便保持最少数量的终端.例如,我有一个进程侦听消息以提取文件,第二个进程侦听消息以便上传文件:使用"&"我可以在一个终端中运行这两个服务,通过单个ssh连接到我的服务器.


*****我刚刚意识到在ssh会话关闭后,通过"&"运行的这些进程也将"保持活跃"!如果与服务器的连接中断,非常整洁有用**

  • 使用 & 我们也可以获得 PID 以便我们可以根据需要终止进程,并且我们还可以检查该进程的状态 (3认同)

Tim*_*ace 6

如果没有其他说明,则命令将接管前台。在一个shell会话中,只有一个“前台”进程正在运行。&符号指示命令在后台进程中运行,并立即返回命令行以获取其他命令。

sh my_script.sh &
Run Code Online (Sandbox Code Playgroud)

Shell会话关闭后,后台进程将无法保持活动状态。SIGHUP终止所有正在运行的进程。无论如何还是默认情况。如果您的命令长时间运行或无限期运行(即:微服务),则需要使用nohup预先挂起它,以便在断开会话连接后它仍在运行:

nohup sh my_script.sh &
Run Code Online (Sandbox Code Playgroud)

编辑:当使用&时,关于关闭后台进程似乎确实有一个灰色区域。请注意,根据您的操作系统和本地配置(尤其是在CENTOS / RHEL上),shell 可能会关闭您的进程:https ://serverfault.com/a/117157 。