无限循环发送到后台的寿命是多长?

无限循环发送到后台的寿命是多长?

无限循环何时结束?

例如如果我跑

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 会发送给所有进程。

相关内容