语境
我已经检查了有关同一主题的几个问题,但当他们解释后台进程到底是什么时,我仍然感到困惑。我解释的常见答案是:
在后台运行的进程允许您与同一终端交互......等等。
我已经通过运行以下命令对此进行了测试:
ping google.com -c 100 &
- PS:我也在没有操作符的情况下运行了相同的命令
&
并使用了 Ctrl-Z,但所做的只是暂停命令
问题
当我运行此命令时,输出仍在我的主终端中,并且在该命令完成运行或终止该命令之前我无法执行任何其他命令。
在列出我的问题之前,我的问题不是如何将命令的输出重定向到单独的文件/位置。我已经知道如何将ping google.com -c 100
命令的输出重定向到不同的位置,以便我仍然可以与主终端交互
我的问题是
- 用最简单的术语来说,后台命令实际上是做什么的
&
在命令末尾添加 a 有什么作用- 这样做的目的是什么/我可以从后台命令中获得什么
- 我什么时候想要将命令置于后台
**如果您需要进一步澄清问题或背景,请告诉我
答案1
在交互式 shell 的上下文中回答这些问题。在 shell 脚本的上下文中,这些行为略有不同,但在很大程度上相似。
- 用最简单的术语来说,后台命令实际上是做什么的
后台命令(或其他进程)允许它执行,同时仍然允许您与 shell 交互(即启动新的过程)。
- 在命令末尾加&有什么作用
分隔符&
表示给定命令的结束,并立即将该命令调用的进程移至后台执行。类似地,;
分隔符表示要执行的给定命令的结束,直到该命令终止,然后提供新的 shell 提示符。
- 这样做的目的是什么/我可以从后台命令中获得什么
- 我什么时候想要将命令置于后台
这些本质上是同一个问题。简短的答案是:当你要执行一个需要很长时间才能运行的命令时,但你可以在执行它的同时继续做其他事情。一个例子是,对于一个人为的例子:
$ tail -f /path/to/apache-log > ~/webserverlog.txt &
$ curl --silent -o /dev/null https://localhost/path/site/you/are/debugging
$ kill %1