无限循环何时结束?
例如如果我跑
while :; do sleep 1; date +%s; done &
什么时候这一切才会结束——关闭终端还是关机?
答案1
当你&
最后提供时,它会进入后台。它是否被杀死取决于你如何关闭终端。
如果您关闭终端应用程序本身(Ctrl+ ,按F4窗口装饰中的 x ,或Shift+ Ctrl+ ),它会终止后台进程。Wgnome-terminal
exit
但是,如果您使用或Ctrl+关闭终端D,它将继续运行,即使您注销(除非它是 GUI 应用程序)。当您关闭时,它将结束。
(我不知道为什么两者之间会有差异。我怀疑当你关闭应用程序时,操作系统也会关闭它及其子应用程序。)
以下是不同的:
nohup while :; do sleep 1; date +%s; done &
该nohup
命令将其与终端分离。无论您如何关闭终端,该命令都会继续运行,直到您关闭(注销是不够的)或手动终止该命令。
当您使用 时nohup
,输出将转到,~/nohup.out
除非您手动重定向输出。
PS 该命令无法nohup
按给定的方式运行,因为nohup
不接受复合命令。但您可以编写脚本并使用 运行该脚本nohup
。
PPS 运行 GUI 更容易看到发生了什么。while
我没有运行 ... 命令,而是运行了以下命令:
gcalctool &
更快更容易地看到正在发生的事情,因为计算器在被杀死时就会消失;并且您可以轻松地杀死它(只需关闭计算器)。
答案2
如果您提供&
结束,则关闭终端不会关闭进程。但它仍可以通过 TERM 或 KILL 信号终止。关闭时,TERM 和 KILL 会发送给所有进程。