如何在注销后保持 Linux 上的进程继续运行

工程实践
弱电工程 工程实践
如何在注销后保持 Linux 上的进程继续运行

如何在注销后保持 Linux 上的进程继续运行

弱电工程工程实践

导语

默认情况下,一旦您注销会话,在 linux 命令行上运行的进程就会终止

要点

  • 默认情况下,一旦您注销会话,在 linux 命令行上运行的进程就会终止
  • 但是,如果您想要启动一个长时间运行的进程并确保它在您注销后继续运行,可以通过多种方法实现这一点
  • 第一种是使用nohup命令
  • 使用nohup nohup (无挂起)命令将覆盖在您注销时终止进程的正常挂起(SIGHUP 信号)

默认情况下,一旦您注销会话,在 linux 命令行上运行的进程就会终止。但是,如果您想要启动一个长时间运行的进程并确保它在您注销后继续运行,可以通过多种方法实现这一点。第一种是使用nohup命令。

使用nohup

nohup (无挂起)命令将覆盖在您注销时终止进程的正常挂起(SIGHUP 信号)。例如,如果您想运行一个具有长时间运行循环的进程并让它自行完成,您可以使用如下命令:

% nohup long-loop &
[1] 6828
$ nohup: ignoring input and appending output to 'nohup.out'

请注意,SIGHUP 是当进程的控制终端关闭时发送到进程的信号。
一旦以这种方式使用nohup命令,您就可以注销,因为它会自行运行完成。根据进程,它可能会在您下次登录时完成。无论如何,生成的输出将添加到名为“nohup.out”的文件中。

如果您希望将输出放入单独的文件中(例如,如果您需要保留一些早期的 nohup.out 内容),您可以使用如下命令指定另一个输出名称:

$ nohup long-loop &> nohup2.out &

如果您重新登录时该进程仍在运行,您应该能够在ps命令输出中找到它。使用jobs命令您将看不到它。

$ ps -ef | grep loop
shs         6861    6366  0 13:52 pts/4    00:00:00 /bin/bash ./long-loop

如果该过程在您重新登录之前完成,请在 nohup.out 文件中查找其输出。

让进程在启动后自行运行

即使进程已经开始运行,您也可以让其自行运行,去做这个:

  • 键入Ctrl+Z暂停程序并返回 shell
  • 使用bg命令将进程移至后台运行
  • 使用disown -h命令(即 disown -h %1),其中 %1 是作业编号,以解除它与当前 shell 的关联

注意:您还可以使用 jobs 命令查找您的作业编号。

$ big-loop
^Z
[1]+  Stopped                 big-loop
$ bg
[1]+ big-loop &		<=== %1
$ disown -h %1
$ jobs
[1]+  Running                 big-loop &