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

我是一名系统pipe理员,并被要求运行一个linux脚本来清理系统。

命令是这样的:

perl script.pl > output.log & 

所以这个命令是以“ &结尾的,有没有什么特别的意义呢?

我有壳的基本知识,但我从来没有见过这个。

&使命令在后台运行。

man bash

如果一个命令被控制操作符终止,那么shell在一个子shell中在后台执行命令。 shell不会等待命令完成,返回状态为0。

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

*****我刚刚意识到,在ssh会话closures后,通过“&”运行的这些进程也将“保持活着”! 相当整洁和有用的,如果你的服务器连接中断**

当没有告知其他命令接pipe前景。 您只有一个“前台”进程在单个shell会话中运行。 &符号指示命令在后台进程中运行,并立即返回命令行以获取其他命令。

 sh my_script.sh & 

在shell会话closures后,后台进程不会保持活动状态。 SIGHUP终止所有正在运行的进程。 无论如何默认。 如果你的命令长时间运行或者无限期地运行(例如:microservice),你需要使用nohup来提示它,以便在断开与会话之后它仍然在运行:

 nohup sh my_script.sh & 

编辑:使用&时,似乎有关于后台进程closures的灰色区域。 请注意,shell 可能会根据您的操作系统和本地configuration(特别是CENTOS / RHEL)closures进程: https ://serverfault.com/a/117157。