即使用户已注销,nohup 命令是否仍可能运行?

即使用户已注销,nohup 命令是否仍可能运行?

据我所知,当用户关闭终端时,nohup 命令仍在运行,但当用户注销时则不会运行。这可能吗?当用户注销时,所有进程都会终止吗?

答案1

最初,“注销”在 Unix 上与“关闭终端”完全相同。(嗯,断开终端或挂断,因为它最初是一个有线连接的物理设备,后来才成为 X11 应用程序。)每当您断开连接时,系统都会向所有剩余进程发送 SIGHUP,它们会将其解释为退出命令……或者它们可以忽略它并继续运行。在这样的系统上,如果程序忽略了 SIGHUP,它将在注销后继续运行。(因此命令nohup告诉程序忽略 SIGHUP。)

在当前系统(主要是 Linux)中,进程是否保持活动与终端挂断完全无关,并且可以通过两种方式实现:

  • 传统上,后台进程在注销时根本不会受到影响:如果它们在终端关闭后仍然存在,它们甚至不会注意随后的注销。非 systemd Linux 以及大多数 BSD 都是这种情况。

  • 然而,在各种使用 systemd 的 Linux 发行版中,cgroup 中的所有进程都是被杀默认情况下,在注销期间。这使用与终端挂断不同的信号(通常是 SIGTERM),因此如果此功能处于活动状态,它将完全绕过任何 nohup 使用。

简而言之,这是可能的,但取决于您的操作系统/发行版如何配置。

如果您使用 systemd 作为初始化系统,请禁用 /etc/systemd/logind.conf 中的“KillUserProcesses=”选项(然后重新启动),或者使用“loginctl enable-linger”激活“用户服务管理器”,并使用“systemd-run --user”启动您的后台作业。

答案2

当然,nohup 命令可以在用户注销后继续运行——这基本上就是基本的目的nohup

相关内容