在Linux命令的结尾处使用"&"是什么意思?

225 浏览
0 Comments

在Linux命令的结尾处使用"&"是什么意思?

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

命令是这样的:

perl script.pl > output.log &

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

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

0
0 Comments

当没有其他指示时,命令会在前台运行。在单个shell会话中,只有一个“前台”进程在运行。符号“&”指示命令在后台进程中运行,并立即返回到命令行以执行其他命令。

后台进程在shell会话关闭后不会保持运行。默认情况下,SIGHUP会终止所有正在运行的进程。如果您的命令是长时间运行或无限运行的(例如:微服务),您需要在命令之前加上nohup,以便在断开会话后它继续运行:

nohup sh my_script.sh &

编辑:在使用“&”时,关于关闭后台进程似乎存在一些灰色地带。请注意,根据您的操作系统和本地配置(特别是在CENTOS/RHEL上),shell可能会关闭您的进程。

https://serverfault.com/a/117157

0
0 Comments

在Linux命令中,使用"&"符号可以通过一个SSH连接运行多个进程,以保持最少数量的终端。例如,我有一个进程用于监听消息以提取文件,第二个进程用于监听消息以上传文件:使用"&"符号,我可以在一个终端中通过单个SSH连接运行这两个服务。

通过"&"运行的这些进程在SSH会话关闭后也会保持运行状态。如果SSH连接到服务器中断且未使用终端复用器(screen、tmux、byobu),这非常方便和有用。

使用"nohup"命令也可以使进程保持运行。

使用"&"我们还可以获取PID,以便在需要时终止进程,也可以检查进程的状态。

如何终止进程?如何获取PID?

您可以使用"ps aux"命令,然后将其输出通过管道传递给grep来搜索所需的内容,比如按命令或用户搜索。只是为了清楚起见,"ps"是命令,"aux"是它的参数。

解决方法来源于unix.stackexchange.com/questions/106847/…

0
0 Comments

&在linux命令的末尾表示将命令在后台运行。

根据man bash的说明:

如果一个命令以控制操作符&结尾,shell会在子shell中后台执行该命令。shell不会等待命令执行完毕,返回状态为0。

是否可以等待所有使用&调用的命令执行完毕?

是的,可以使用wait命令等待。

0