使用 bash 的Job Control将进程发送到后台:
bg
在后台运行它。 disown -h [job-spec]
其中 [job-spec] 是作业编号(如第一个正在运行的作业的%1
; 使用jobs
命令查找您的编号),以便在终端关闭时不会终止作业。 假设由于某种原因, Ctrl + Z也无法正常工作,转到另一个终端,找到进程 ID(使用ps
)并运行:
kill -SIGSTOP PID
kill -SIGCONT PID
SIGSTOP
将暂停该过程, SIGCONT
将在后台恢复该过程。所以现在,关闭两个终端并不会停止你的过程。
将运行的作业与 shell 分离的命令(= 使其成为 nohup)被disown
并且是一个基本的 shell 命令。
从 bash-manpage(man bash):
disown [-ar] [-h] [jobspec ...]
如果没有选项,则会从活动作业表中删除每个 jobspec。如果给出了 - h 选项,则不会从表中删除每个 jobspec,但会对其进行标记,以便在 shell 收到 SIGHUP 时不会将 SIGHUP 发送到作业。如果不存在 jobspec,并且未提供 - a 和 - r 选项,则使用当前作业。如果未提供 jobspec,则 - a 选项表示删除或标记所有作业; 没有 jobspec 参数的 - r 选项将操作限制为正在运行的作业。除非 jobspec 未指定有效作业,否则返回值为 0。
那意味着,这很简单
disown -a
将删除作业表中的所有作业并使其成为 nohup