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


94

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

命令是这样的:

perl script.pl > output.log &

因此,该命令以&符号结尾,它是否有特殊意义?

我对shell有基本的了解,但是我从未见过。


对不起,我很抱歉,我确实知道这些基本知识
Dude 2012年

2
如果您在此页面上,查找&和之间的区别&&:: &在后台执行第一个命令;&&执行第一个命令,如果成功退出,则有条件地继续执行第二个命令。
David Bodow

Answers:


146

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

来自man bash

如果命令由控制操作符终止,则外壳程序将在子外壳程序的后台执行该命令。Shell不等待命令完成,返回状态为0。


12

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


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


nohup还将使进程保持活动状态。
杰里·钱

2
与&也可以获取PID,因此我们可以根据需要终止进程,也可以检查该进程的状态
Dhaval Solanki

12

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

sh my_script.sh &

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

nohup sh my_script.sh &

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


1

我不确定,但是我现在正在读一本书,我得到的是程序需要处理其信号(就像我按时一样CTRL-C)。现在,程序可以SIG_IGN用来忽略所有信号或SIG_DFL恢复默认操作。

现在,如果您这样做了,$ command &则此作为后台进程运行的进程将忽略所有将要发生的信号。对于前台处理,不会忽略这些信号。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.