avatar

目录
Linux 后台运行的几种办法

使用 & 一开始就将任务放到后台运行

./xxx.sh &

非正常退出 shell 如直接打叉, kill 等, 也会结束后台任务。因为运行脚本的父进程是当前 shell 进程,关闭当前 shell 终端时,会发送 hangup 信号给子进程,子进程收到 hangup 信号后退出。

用 exit(ctrl+d) 退出,则不会发送 hangup 信号, 可以继续在后台运行。

使用 ctrl + z + bg 将前台任务转入后台运行

ctrl + z切换当前任务到后台并冻结任务,再用 jobs 可以查看到所有后台任务的 jobs-id,接着bg jobs-id 可以后台恢复运行冻结的任务, 相当于./xxx.sh &

使用 nohub 解决使用 & 异常退出后任务中断

nohub可以忽略任务挂断信号 nohup ./xxx.sh & shell 退出也不会结束任务。

使用 disown -h 解决任务运行时忘记使用 nohub

任务运行时, 忘记使用了nohub, 任务执行后想达到使用 nohub 的效果, 则可以使用 disown -h job-id 补救。

使用 setsid& 一开始就将任务放到后台运行

setsid ./xxx.sh & , setsid 会创建一个新会话进程来执行任务, 新会话进程的父进程 PID 为 1(即 init 程序), 运行任务与当前会话就无关了。

使用 ()& 一开始就将任务放到后台运行

(./xxx.sh &) 也会创建一个新的 shell 来执行任务, 新的 shell 进程父进程PID 也是 1, 运行任务与当前会话就无关了。

三个相关命令

  • jobs
    查看当前 shell 中的后台任务和任务的 job-id
  • bg
    bg job-id 后台恢复运行某被冻结的任务。
  • fg
    bg job-id 切换后台任务到前台运行。

其他第三方工具 screen

文章作者: Juchia Lu
文章链接: https://juchia.com/2019/02/27/Linux-%E5%90%8E%E5%8F%B0%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F%E7%9A%84%E5%87%A0%E7%A7%8D%E5%8A%9E%E6%B3%95/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Juchia