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

tot*_*tti 4 bash

无限循环何时结束?

例如,如果我跑

while :; do sleep 1; date +%s; done &
Run Code Online (Sandbox Code Playgroud)

这什么时候结束——关闭终端还是关机?

Pad*_*dau 5

当您&在最后提供时,它会进入后台。它是否被杀死取决于您如何关闭终端。

如果您关闭终端应用程序本身(Ctrl+ F4,按X窗口装饰,或Shift+ Ctrl+Wgnome-terminal),它杀死后台进程。

但是,如果您使用exitCtrl+关闭终端D,它会继续运行,即使您注销(除非它是 GUI 应用程序)。当你关闭时它就会结束。

(我不知道为什么两者之间有区别。我怀疑当您关闭应用程序时,操作系统会关闭它及其子项。)

以下是不同的:

nohup while :; do sleep 1; date +%s; done &
Run Code Online (Sandbox Code Playgroud)

nohup命令将其与终端分离。无论您关闭终端,该命令都会继续运行,直到您关闭(注销是不够的)或手动终止该命令。

当您使用 时nohup~/nohup.out除非您手动重定向输出,否则输出会转到。

PS 该命令将无法正常工作nohup,因为nohup它不采用复合命令。但是您可以编写脚本并使用nohup.

PPS 通过运行 GUI 可以更容易地查看正在发生的事情。而不是while... 命令,我运行这个:

gcalctool &
Run Code Online (Sandbox Code Playgroud)

更快速、更容易地看到正在发生的事情,因为计算器在它被杀死时就会消失;你可以轻松杀死它(只需关闭计算器)。