无限循环何时结束?
例如,如果我跑
while :; do sleep 1; date +%s; done &
Run Code Online (Sandbox Code Playgroud)
这什么时候结束——关闭终端还是关机?
当您&在最后提供时,它会进入后台。它是否被杀死取决于您如何关闭终端。
如果您关闭终端应用程序本身(Ctrl+ F4,按X窗口装饰,或Shift+ Ctrl+W的gnome-terminal),它杀死后台进程。
但是,如果您使用exit或Ctrl+关闭终端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)
更快速、更容易地看到正在发生的事情,因为计算器在它被杀死时就会消失;你可以轻松杀死它(只需关闭计算器)。