Linux - shell - jobs, fg, bg

  1. 概述

    1. jobs, fg, bg
  2. 背景

    1. 之前好像说过, 要讲 jobs
      1. 结果一直鸽到现在
      2. vim - 执行 shell 命令& 与 nohup, 都提到过这个东西
    2. 老老实实开始写吧
  3. 环境

    1. OS

      1. win10
    2. git-bash

      1. mintty-3.4.0
  4. 类型

    1. 这是一篇 教程类 的博客

1. 问题: 想查看后台的任务

  1. 概述

    1. rt
  2. 场景

    1. 使用了 & 或者 nohup &
    2. 或者使用了 ctrl + z
  3. 需求

    1. 查看
      1. 想看看都哪些任务被放到后台了
    2. 唤起
      1. 重新把任务拉回到前台
    3. 结束
      1. 直接把任务结束了

2. jobs

  1. 概述

    1. jobs
  2. jobs

    1. 概述

      1. linux 查看后台作业的工具
    2. 使用

      # 1. 直接查看
      > jobs
      
      ## 结果
      [1]-  Stopped                 vim chpt05.md
      [2]+  Stopped                 vim readme.md
      
      ## 1. [1] 
      ### 当前 终端下, 后台作业的 作业编号
      
      ## 2. -
      ### 这块我没找到资料, 我自己观察的初步结论...
      ### +: 表示 上一个 被放到后台的作业
      ### -: 表示 上上一个 被放到后台的作业
      
      ## 3. Stopped
      ### 状态, 这个后面会详细说
      
      ## 4. vim chpt05.md
      ### 这个是后台进程的命令
      
      # 2. 带 pid 的查看
      > jobs -l
      
      # 3. 只想看 pid
      > jobs -p
      
      # 4. 查看 stopped 状态的作业
      > jobs -s
      
      # 5. 查看 running 状态的作业
      > jobs -r
      
  3. 疑问: 状态到底是怎么回事?

    1. 问题

      1. rt
      2. 有几种状态
      3. 都是什么意思
      4. 怎么相互转化
    2. 解答

      1. 尴尬了, 我也只知道一点...
      2. 目前我只见过 3 种
        1. stopped: 已经暂停了
        2. running: 正在后台运行
        3. done: 后台执行的任务, 已经完成了; 下次再用 jobs 查看, 就看不到任务了
      3. 转化的东西, 后面再说

3. jobs 状态转化

  1. 概述
    1. jobs 的状态转换

1. stopped

  1. 概述

    1. stopped 状态
  2. 操作

    1. 执行前台命令
    2. ctrl + z
  3. 结果

    1. 命令被放到后台
    2. 暂停执行
    3. 状态是 stopped

2. running

  1. 概述

    1. running 状态
  2. 操作

    1. 方案1: &

      > sleep 10 &
      
    2. 方案2: nohup &

      > nohup sleep 10 & 
      
  3. 疑问

    1. 问题1: 我想让后台暂停的程序继续运行

      1. 问题

        1. rt
      2. 解答

        1. 使用 bg 命令

          # 如果执行成功, 命令会在 后台运行
          # jobs 可以查看, 作业状态变为 runnning
          # 部分任务可能不支持, 比如 vim...
          > bg %<jobsId>
          
    2. 问题2: 后台任务执行的怎么样, 我不放心想看一看

      1. 问题

        1. rt
      2. 解答

        1. 使用 fg 命令

          # 将的任务, 拉到前台来
          > fg %<jobId>
          
    3. 问题3: 能不能让后台的 running 任务暂停?

      1. 问题

        1. rt
      2. 解答

        1. 我目前没什么好办法, 只有 先fg, 再 ctrl + z
    4. 问题4: 能不能直接把后台的任务干掉?

      1. 问题

        1. rt
      2. 解答

        1. 获得 pid 之后, 直接用 kill 解决

ps

  1. ref
    1. bash
      1. 概述
        1. Job Control
          1. linux 后台 job 的间接
        2. jobs
          1. jobs 命令
        3. 篇幅有点长, 不太好找...
posted @ 2021-01-22 16:18  轩辕拾銉  阅读(148)  评论(0编辑  收藏  举报