转载请注明文章出处:https://itlanyan.com/make-running-task-detach-terminal/

让任务脱离终端运行,是非常容易做到的,常用的方法有两种:tmux/screen,或者nohup。如果一个正在的运行的任务,因为网络或者时间关系,需要退出当前会话,如何让其在后台继续运行呢?答案是使用disown命令,本文介绍其用法。

将正在运行的任务脱离终端运行

使用disown将正在运行的任务脱离终端运行的操作如下:

  1. ctrl + z暂停任务;
  2. 执行bg让其转入后台继续运行;
  3. 输入disown -h %jobid让其脱离终端运行,其中jobid是用jobs命令查看的后台任务编号。如果有多个任务,可以使用disown -a命令.

disownbash内置命令,作用是删除当前shell的任务。如果你的shell不是bash,可能没有disown,则可以尝试kill命令组合达到相同效果:

  1. 新打开一个会话,暂停任务:kill -s SIGTSTP pid
  2. 在新会话中将任务放入后台运行:kill -s SIGCONT pid;
  3. 此时两个会话均可安全的关闭,任务将继续在后台执行。

参考

  1. https://stackoverflow.com/questions/625409/how-do-i-put-an-already-running-process-under-nohup