• Linux 任务管理


    Linux任务管理

    1. job control

    bash只能够管理自己的任务而不能管理其他bash的任务,即使是root的用户也不能够将别人bash下面的job拿过来执行。此外,后台的任务又可以分为暂停与运行状态。接下来说一下实际执行job控制的命令:

    • 直接将命令丢到后台执行的&符号

    将任务丢到后台执行,此时,要求任务不能与前台交互,且无法用<Ctrl + C>终止它。

    此外,由于有些命令的执行会有大篇幅的输出,比如tar -zpcvf /tmp/etc.tar.gz /etc &> /tmp/log.txt,会导致前台被输出信息弄得花花绿绿的,可以搭配nohup命令使用。

    2020-10-02 20-30-51 的屏幕截图

    • 将[目前]的任务丢到后台中暂停:<Ctrl + Z>

    将任务丢到后台暂停,比如我们第二次作业中的查看当前网段中有多少主机连通,由于ping的时间比较长,而且我们无法通过<Ctrl + C>中断程序的执行,script在子bash中执行,此实我们就可以通过<Ctrl + Z>将任务丢到后台中执行。

    image-20201002203659634

    注意到输出格式为[job number] + PID status command

    其中job number仅在当前bash中有效,+ 代表默认的使用任务。所以说:[如果目前我有多个任务在后台运行或暂停,而如果此时输入fg命令,那么被+标注的那个任务会被拿到前台中来处理]。

    • 查看目前的后台任务状态:jobs

    jobs 命令 选项详解:

    -l 出了列出job number 与命令串之外,同时列出PID。

    -r 列出后台正在run的任务(run)

    -s 仅列出正在后台暂停的任务(stop)

    • 将后台任务拿到前台处理:fg

      fg %jobnumber 其中%可有可无,推荐带上

      fg 取出默认任务

      fg - 拿出标号为-的任务

    • 将任务在后台下的状态变为运行中: bg

    注意bg命令不是把前台任务移到后台运行,而是指将后台中暂停的任务变成运行状态。

    image-20201002205432922

    可以看到,我们通过bg命令和jobnumber成功的将后台暂停的任务转变成了执行状态。

    • 管理后台当中的任务:kill

    kill命令格式:kill -signal %jobnumber

    kill -l

    -l 列出目前kill所能用的所有信号

    signal 代表给予后面接的那个任务什么样的指示

    ​ -1 重新读取一次参数的配置文件

    ​ -2 代表由键盘输入<Ctrl + C>同样的操作

    ​ -9 立即强制删除一个任务

    ​ -15 以正常的进程方式终止一项任务,后面我们会说-9和-15的差别

    -9这个信号通常是在[强制删除一个不正常的任务]时所使用的,-15则是以正常步骤结束一项任务(15是默认值),两者并不一样,举个例子,加入以vim编辑一个文件,正常会产生一个.filename.swp的文件。如果使用-15这个信号时,vim会尝试以正常的步骤结束vi的任务,所以.filename.swp会被主动删除,而以-9命令来结束vi的执行时,.filename.swp则不会被删除,还是会存在于文件系统之中。

    然而在上面的这个例子中,应该先使用fg来取回前台的控制权,然后再退出vim。因此,kill 其实是无法使用默认的-15信号来终止vim的,而且不建议使用-9信号。

    Tips;可以使用man 7 siganl查看kill支持的signal,做出对应的选择。

    kill命令后面接的数字默认是PID,所以如果要写jobnumber,一定要记得带上%。

    2. 脱机管理问题

    以上所说的前台与后台都是针对你登录的bash而言,当你通过远程连接登录上bash后,如果你在你的后台任务还没执行完的过程中断开了远程连接,任务并不会在后台继续执行,而是会被中断。那么我们该怎么实现脱机后的任务继续执行呢?

    这个时候可以考虑使用nohup命令。注意,nohup是将任务挂在系统的后台,与你当前正在运行的bash并无关系,因此输出并不会输出到你所使用的bash上,而是会生成一个中间文件~/nohup.out。当你再次敲几nohup.out的时候,才会给出提示信息。

    nohup 命令用法:

    nohup [命令与参数] 终端中的前台任务

    nohup [命令与参数] & 终端中的后台任务

  • 相关阅读:
    LUA表的引用理解
    UNITY 打包安卓APK
    UNITY打包问题
    U3D 打包时找不到tag的问题
    break prefab instance的原理
    C#调用LUA函数
    LUA 利用#遍历表的问题
    U3D笔记11:47 2016/11/30-15:15 2016/12/19
    Unity3D 预设打包的注意事项
    回调 和 覆盖
  • 原文地址:https://www.cnblogs.com/hwahe/p/14272602.html
Copyright © 2020-2023  润新知