Linux Job Controll
-
asdfas
asdfasdf
-
bash 只能够管理自己的工作(子程序)而不能管理其他bash的工作
-
Jobf分为foreground和background两类
-
background的Job的工作状态可以分为[暂停(stop)]和[运行(running)]
操作
- 使命令在后台运行 [ & ]
- 将当前工作暂停,并使其在后台,也就是使一个工作状态变为后台暂停 [ctrl] - z
- 显示目前后台的工作状态[jobs -lrs]
以上三条命令中,输出可能会出现+ -符号,其中+代表这是最近一个被放入后台的工作,-代表第二近被放入后台的工作,之前的工作不会再有其他提示 - 将后台的任务取出到前台进行执行: fg
fg默认会取出最近放进的任务执行,也可以通过job %jobid来指定要取出的任务 - 改变后台运行命令的状态为running: bg
- 管理后台的工作: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]
网友评论