Linux中关于前台任务和后台任务的相关操作

概念

以下概念以终端操作为前提

  • 前台任务: 在前台执行的任务, 任务一旦执行则占用终端窗口, 同一窗口内 无法进行其他操作
  • 后台任务: 在后台执行的任务, 任务执行不占用终端窗口, 同一窗口内 可一边执行任务 一边进行其他操作

无论是前台任务还是后台任务, 终端一旦被关闭, 任务会立即终止

前台任务

  1. 终止前台任务

    1
    Ctrl+C
  2. 暂停前台任务

    1
    Ctrl+Z
  3. 查看当前暂停的任务和所有后台任务信息

    1
    jobs -l
  4. 将前台任务切换成后台任务

    1
    2
    3
    1.输入ctrl + z 暂停任务
    2.输入jobs查看任务号
    3.使用 bg %任务号 将该任务号放入后台
  5. 终端关闭 保持前台任务继续运行

    1
    nohup xxxx

    nohup: 表示忽略hup信号, 终端关闭任务进程也不销毁

后台任务

  1. 以后台方式启动任务, 命令末尾加&即可

    1
    watch  -n 10 sh  test.sh  &  #每10s在后台执行一次test.sh脚本
  2. 终止后台任务

    方式一:

    1
    2
    1.输入jobs查看任务号
    2.kill %任务编号

    方式二:

    1
    2
    1.使用ps指令查看任务进程pid
    2.kill pid
  3. 将后台任务切换成前台任务

    1
    2
    1.输入jobs查看任务号
    2.fg %任务编号
  4. 终端关闭 保持后台任务继续运行

    如果后台任务还未启动, 指令前面加nohup:

    1
    nohup watch  -n 10 sh  test.sh  &

    如果后台任务已经启动:

    1
    2
    1.输入jobs查看任务号
    2.使用 disown -h %任务号

    disown指令用于对jobs任务的移除移出操作, 常见参数有:

    1
    2
    3
    disown -a //删除全部作业
    disown -r //删除正在运行的作业
    disown -h %任务号 //移出(非删除)指定作业, 同时忽略hup信号

实现后台任务的另一种方式

除了使用nuhup+&的方式使得任务在后台运行且不受终端关闭影响外, 还有一种方式那就是使用systemd

创建systemd服务步骤如下:

  1. 创建服务配置文件

    1
    vim xxx.service

    将以下内容填入配置文件中:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [Unit]
    Description=Foo

    [Service]
    ExecStart=/usr/sbin/foo-daemon
    Restart=always

    [Install]
    WantedBy=multi-user.target
    • Description: 表示服务描述
    • ExecStart: 表示需要执行的程序指令, 需要填入程序的完整路径
    • Restart: 表示是否自动重启, 可选参数有noalwayson-successon-failureon-abnormalon-aborton-watchdog
    • WantedBy: 表示用户权限

    更多配置, 可参考官方文档 或者博客介绍

  2. 将服务配置文件拷贝至/lib/systemd/system/目录下

    1
    sudo cp xxx.service /lib/systemd/system/
  3. 启动服务

    1
    sudo systemctl start xxx
关于服务的其他操作指令
  1. 停止服务

    1
    sudo systemctl stop xxx
  2. 查看服务运行状态

    1
    sudo systemctl status xxx
  3. 设置服务开机自启动

    1
    sudo systemctl enable xxx
  4. 禁止服务开启自启动

    1
    sudo systemctl disable xxx
  5. 服务重启

    1
    sudo systemctl restart xxx
  6. 查看systemd的版本

    1
    sudo systemctl --version
  7. 查看配置文件

    1
    systemctl cat xxx.service

systemdnohup+&之间的对比

systemd可以满足以下需求:

  • 方便分析问题的服务运行日志记录
  • 服务管理的日志
  • 异常退出时可以根据需要重新启动

nohup 只能记录服务运行时的输出和出错日志, 根据我们实际的需求进行选择即可

本文为作者原创 转载时请注明出处 谢谢

B站入口

打赏通道

微信公众号二维码如下:

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%