Linux 命令末尾的“&”是什么意思?
- 2024-10-09 09:11:00
- admin 原创
- 80
问题描述:
我是一名系统管理员,我被要求运行一个 Linux 脚本来清理系统。
命令如下:
perl script.pl > output.log &
那么这个命令以一个符号结尾&
,有什么特殊意义吗?
我对 shell 有基本的了解,但从未见过这种情况。
解决方案 1:
这&
使得命令在后台运行。
从man bash
:
如果命令以控制操作符&结束,则 shell 会在子 shell 中在后台执行该命令。shell 不会等待命令完成,返回状态为 0。
解决方案 2:
如果没有另行通知,命令将接管前台。在单个 shell 会话中,只有一个“前台”进程在运行。& 符号指示命令在后台进程中运行,并立即返回命令行以执行其他命令。
sh my_script.sh &
在 shell 会话关闭后,后台进程将不再保持活动状态。SIGHUP 会终止所有正在运行的进程。无论如何,默认情况下都是如此。如果您的命令运行时间长或无限期运行(即微服务),则需要使用nohup将其挂起,以便它在您断开会话后仍保持运行:
nohup sh my_script.sh &
编辑:使用 & 时,关闭后台进程似乎存在灰色区域。请注意,shell可能会根据您的操作系统和本地配置关闭您的进程(特别是在 CENTOS/RHEL 上):
https ://serverfault.com/a/117157 。
解决方案 3:
此外,您可以使用“&”符号通过一个 (1) ssh 连接运行多个进程,以保持最少的终端数量。例如,我有一个进程监听消息以提取文件,第二个进程监听消息以上传文件:使用“&”,我可以通过与我的服务器的单个 ssh 连接在一个终端中运行这两个服务。
这些通过“&”运行的进程在 ssh 会话关闭后也将“保持活动状态”。如果与服务器的 ssh 连接中断并且未使用终端多路复用器(screen、tmux、byobu),则非常简洁且有用。
解决方案 4:
我不太确定,但我现在正在读一本书,我得到的是程序需要处理其信号(就像我按下时一样CTRL-C
)。现在程序可以用来SIG_IGN
忽略所有信号或SIG_DFL
恢复默认操作。
现在,如果您$ command &
这样做,那么作为后台进程运行的该进程将忽略将发生的所有信号。对于前台进程,这些信号不会被忽略。
解决方案 5:
如果您有一个执行的命令并且没有快速返回状态 0(提示的控制)。
例如:
命令
gedit
启动默认编辑器gedit
UI。命令
eclipse
启动 eclipse IDE。
这样的命令会不断在终端中抛出活动日志,而不会返回命令提示符。
问题是,如何在后台运行这样的命令,以便我们可以返回命令终端并且可以使用终端执行其他任务。
答案是:通过附加&
在该命令之后。
user@mymachine:~$ <command> &
例子:
user@mymachine:~$ edit &
user@mymachine:~$ eclipse &
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件