Linux 作业管理

经常在服务器上登陆,操作,有些命令一旦执行,就一直在屏幕上输出内容,如果想切换到终端去干其他的事,新手通常是直接Ctrl+c强制删除任务,然后再回来重新执行.其实完全没这个必要,我们可以把任务切换到后台挂起,然后去干我们自己的事情,干完了之后再切回来,继续执行之前没执行完的任务就行了,听上去是不是像操作系统的进程和线程调度,下面是一些常用的Shell作业管理命令.

作业管理

  1. 当前作业放到后台暂停:Ctrl+z

  2. 观察当前前后台作业状态:jobs

    -l 除了列出作业号之外同时列出PID
    -r 列出仅在后台运行(run)的作业
    -s 仅列出暂停的作业

  3. 将后台作业拿到前台处理:fg

    fg %jobnumber (%可有可无)

  4. 让作业在后台运行:bg

    Ctrl+z让当前作业到后台去暂停,bg作业号就可以在后台run

  5. 管理后台作业:kill
    前面讲的都是把作业放到后台,或者切换到前台,要么挂起,要么执行.如果要删除作业或者重启作业,需要给作业发送特定信号
    kill -signal %jobnumber

    -l 列出当前kill能够使用的信号
    signal 表示给后台作业什么指示,用man 7 signal可知
    -1 重新读取一次参数的设置文件,类似 reload
    -2 表示与由键盘输入Ctrl+c同样的作用
    -9 立刻强制删除一个作业
    -15 以正常方式终止一项作业,与-9不一样

应用场合

有些程序没办法通过应用图标运行,只能调用脚本运行,并且一堆输出日志,当你在服务器上使用Vim编辑一个文件时,想去运行一个脚本,可以先保存Vim内容,然后把Vim切换到后台挂起,去执行脚本之后再且回来继续编辑Vim.