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

问题描述 投票:0回答:5

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

命令是这样的:

perl script.pl > output.log &

所以这个命令以

&
符号结尾,有什么特殊意义吗?

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

linux shell unix
5个回答
237
投票

&
使命令在后台运行。

来自

man bash

如果命令由控制操作符 & 终止,则 shell 在后台子 shell 中执行该命令。 外壳确实 不等待命令完成,并且 返回状态为0。


33
投票

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

sh my_script.sh &
shell 会话关闭后,后台进程将不会保持活动状态。

SIGHUP 终止所有正在运行的进程。无论如何默认。如果您的命令长时间运行或无限期运行(即:微服务),您需要使用 nohup 预挂起它,以便在您与会话断开连接后它仍保持运行: nohup sh my_script.sh &

编辑:
使用 & 时,确实存在关于关闭后台进程的灰色区域。请注意,shell

可能 会关闭你的进程,具体取决于你的操作系统和本地配置(特别是在 CENTOS/RHEL 上): https://serverfault.com/a/117157

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

19
投票
这些通过“&”运行的进程在 ssh 会话关闭后也将“保持活动状态”。如果与服务器的 ssh 连接中断并且没有使用终端多路复用器(screen、tmux、byobu),那么这非常简洁且有用。

我不确定,但我现在正在读一本书,我得到的是程序需要处理它的信号(就像当我按

4
投票
时)。现在程序可以使用

SIG_IGN

 忽略所有信号或 
SIG_DFL
 恢复默认操作。
现在,如果您这样做 
$ command &

那么这个作为后台进程运行的进程将简单地忽略将发生的所有信号。对于前台进程,这些信号不会被忽略。


如果你有一个命令执行但没有快速返回状态0(提示控制)。

3
投票
例如:

命令
    gedit
  1. 启动默认编辑器

    gedit

     UI。

    命令
  2. eclipse
  3. 启动 Eclipse IDE。

    
    

    此类命令不断在终端中抛出活动日志,并且不返回命令提示符。
问题是,如何在后台运行此类命令,以便我们返回命令终端,并且可以使用终端执行其他任务。

答案是:在该命令后添加

&

 user@mymachine:~$ <command> &

示例:
user@mymachine:~$ gedit &
user@mymachine:~$ eclipse &


© www.soinside.com 2019 - 2024. All rights reserved.