Job controll

Linux Job Controll

  1. asdfas

    asdfasdf

    Job controll_第1张图片
    WechatIMG12.jpeg
  2. bash 只能够管理自己的工作(子程序)而不能管理其他bash的工作

  3. Jobf分为foreground和background两类

  4. background的Job的工作状态可以分为[暂停(stop)]和[运行(running)]

操作

  1. 使命令在后台运行 [ & ]
  2. 将当前工作暂停,并使其在后台,也就是使一个工作状态变为后台暂停 [ctrl] - z
  3. 显示目前后台的工作状态[jobs -lrs]
    以上三条命令中,输出可能会出现+ -符号,其中+代表这是最近一个被放入后台的工作,-代表第二近被放入后台的工作,之前的工作不会再有其他提示
  4. 将后台的任务取出到前台进行执行: fg
    fg默认会取出最近放进的任务执行,也可以通过job %jobid来指定要取出的任务
  5. 改变后台运行命令的状态为running: bg
  6. 管理后台的工作:kill -signal %jobid
    kill -l列出当前可以指定的signal
    signal:
    -1 重新读取配置(类似reload)
    -2 与输入[crtl-c]效果相同
    -9 强制删除一个任务
    -15 以正常的方式终止一个任务

离线任务的问题

正常情况下,如果我们离开了terminal,那么即使是在放置在后台的任务,由于是此terminal的子任务,也会被停止,如果我们想要使其不停止,有以下几个方法
  • nohup
    由于用户注销或者网络断开,终端会收到HUP(hungup)信号从而关闭所有子进程,所以我们可以通过忽略该信号来避免任务被关闭
    用法:
    nohup [命令与参数]
    nohup [命令与参数]&
    nohup的输出默认会被重定向到nohup.txt中

  • setsid
    该命令可以使任务的ppid变为init进程的id从而不受当前任务的nohup信号影响

  • &
    用法: ([命令] &)
    通过加一个括号这种小技巧,可以使当前命令的ppid变为init进程的id

  • disown
    补救已经提交过的任务,使之不受HUP信号的影响
    disown -h %jobid使某个任务不受hup信号影响
    disown -ah/-rh使(全部/正在运行)的任务不受nohup的影响

  • screen
    该命令模拟了一个screen
    用法:
    用screen -dmS session name来建立一个处于断开模式下的会话(并指定其会话名)。
    用screen -list来列出所有会话。
    用screen -r session name来重新连接指定会话。
    用快捷键CTRL-a d来暂时断开当前会话。
    未使用screen的pstree
    root@pvcent107 ~]# ping www.google.com &
    [1] 9499
    [root@pvcent107 ~]# pstree -H 9499
    init─┬─Xvnc
    ├─acpid
    ├─atd
    ├─2*[sendmail]
    ├─sshd─┬─sshd───bash───pstree
    │ └─sshd───bash───ping

    使用screen的pstree
    [root@pvcent107 ~]# screen -r Urumchi
    [root@pvcent107 ~]# ping www.ibm.com &
    [1] 9488
    [root@pvcent107 ~]# pstree -H 9488
    init─┬─Xvnc
    ├─acpid
    ├─atd
    ├─screen───bash───ping
    ├─2*[sendmail]

你可能感兴趣的:(Job controll)