SIGHUP
Unix/Linux 系统中的挂断信号,在终端连接断开时发送给相关进程,默认行为是终止进程
时间轴 (近 90 天)
任何希望代理活得比终端窗口长的应用架构应包含:一个独立的长期进程处于自己的会话中并忽略SIGHUP、持有代理的pty master、UI作为客户端通过socket连接、无人附着时缓冲输出、替换UI二进制不影响运行中的宿主、宿主在没有会话后自行退出。
如果一个进程组成为孤儿组且其中有成员处于停止状态,POSIX规定系统会向该组所有成员发送SIGHUP和SIGCONT。
bash在收到SIGHUP后退出前,会向其所有运行中或已停止的作业重新发送SIGHUP。
macOS自10.15起默认登录shell zsh的HUP选项默认开启,在shell退出时向运行中的作业发送SIGHUP。
关闭终端窗口时,内核向会话首进程(通常是shell)发送SIGHUP,随后shell会将该SIGHUP转发给其作业表中的作业,导致AI编程代理进程终止。
nohup通过将SIGHUP设为忽略,使得后台进程在终端关闭时不会被SIGHUP终止。
disown将作业从shell的作业表中移除,shell收到SIGHUP后没有作业可转发,因此该进程不会收到SIGHUP。
setsid使进程在一个没有控制终端的独立会话中运行,从而避免终端挂断时收到SIGHUP。
tmux 会话进程主动脱离控制终端(成为守护进程),因此不会被 SIGHUP 信号波及。
nohup 命令通过让进程忽略 SIGHUP 信号来实现简单的后台持久化
还有 1 条时间轴事件
全部知识事实 (11)
任何希望代理活得比终端窗口长的应用架构应包含:一个独立的长期进程处于自己的会话中并忽略SIGHUP、持有代理的pty master、UI作为客户端通过socket连接、无人附着时缓冲输出、替换UI二进制不影响运行中的宿主、宿主在没有会话后自行退出。
50%待验证如果一个进程组成为孤儿组且其中有成员处于停止状态,POSIX规定系统会向该组所有成员发送SIGHUP和SIGCONT。
50%待验证bash在收到SIGHUP后退出前,会向其所有运行中或已停止的作业重新发送SIGHUP。
50%待验证macOS自10.15起默认登录shell zsh的HUP选项默认开启,在shell退出时向运行中的作业发送SIGHUP。
50%待验证关闭终端窗口时,内核向会话首进程(通常是shell)发送SIGHUP,随后shell会将该SIGHUP转发给其作业表中的作业,导致AI编程代理进程终止。
50%待验证nohup通过将SIGHUP设为忽略,使得后台进程在终端关闭时不会被SIGHUP终止。
50%待验证disown将作业从shell的作业表中移除,shell收到SIGHUP后没有作业可转发,因此该进程不会收到SIGHUP。
50%待验证setsid使进程在一个没有控制终端的独立会话中运行,从而避免终端挂断时收到SIGHUP。
50%待验证tmux 会话进程主动脱离控制终端(成为守护进程),因此不会被 SIGHUP 信号波及。
50%待验证nohup 命令通过让进程忽略 SIGHUP 信号来实现简单的后台持久化
50%待验证当终端窗口关闭时,其中运行的所有子进程都会收到 SIGHUP 信号并终止
50%