轻松学Linux:
job control就是 让Linux在一个bash中可以执行多个工作,其实就是bash中的多个子进程的工作.
这时候就有疑问了? linux不是自带了 7个终端窗口么 在这里面执行多个工作不就可以了么,
是的,可以 ,
alt1-6 是六个命令行终端, 可以互相切换
alt+7 图形界面终端 ,(ctrl+alt+f1切回到 linux命令行终端)
问题来了: 在一些对安全比较严谨的公司,都会限制用户的登录连接数(/etc/security/limits.conf)中设置, 用户只能连接一个连接数,此时job control就有效了,!
job control 分为 前台 foregroud 和 后台 background
例子:
# tar -zpcf /tmp/etc.tar.gz /etc & [1] 8400 <== [job number] PID # tar: Removing leading `/‘ from member names # 在中括号内的号码为工作号码 (job number),该号码与 bash 的控制有关。 # 后续的 8400 则是这个工作在系统中的 PID。至於后续出现的数据是 tar 运行的数据流, # 由於我们没有加上数据流重导向,所以会影响画面!不过不会影响前景的操作喔!
[[email protected] ~]# tar -zcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 & [1] 8429 [[email protected] ~]# |
呵呵!如此一来,输出的资讯都给他传送到 /tmp/log.txt 当中,当然就不会影响到我们前景的作业了。 这样说,您应该可以更清楚数据流重导向的重要性了吧!^_^ |
[[email protected] ~]# jobs [-lrs]选项与参数: -l :除了列出 job number 与命令串之外,同时列出 PID 的号码; -r :仅列出正在背景 run 的工作; -s :仅列出正在背景当中暂停 (stop) 的工作。范例一:观察目前的 bash 当中,所有的工作,与对应的 PID[[email protected] ~]# jobs -l[1]- 10314 Stopped vim ~/.bashrc [2]+ 10833 Stopped find / -print
调用后台的工作 fg fg+number即可 |
jobs 查看当前有多少工作
fg %number 将后台工作提到前台
vi log.txt
ctrl+z后 会放到后台,但是状态是stop的
bg %number 让后台停止的工作在后台变为running状态
管理后台的工作 kill -singal
singal:
1 重新读取一次配置文件
2 相当于ctrl+c
9 强制终止 比如vi log.txt 强制终止后会产生一个.swp文件
15 正常终止
kill后面可以跟pid 也可以跟工作管理 默认是pid 所以我们要管理job control的时候 最好
是 kill -? %number
&后台执行后 但是你退出终端 后台执行的脚本也会停止
例子:
vim sleep.sh
#!/bin/bash
/bin/sleep 500s
/bin/echo "I have sleept 500s"
#chmod +x sleep.sh
nohup命令可以让后台中的工作 在终端退出重新登录后还在运行
nohup ./sleep.sh > /test/log.txt 2>&1 &
# exit
重新登录后 jobs已经不能使用
ps -ef |grep sleep 查看相关进程还在
ps 用法:
-e 显示所有进程。
-f 全格式。
-h 不显示标题。
-l 长格式。
-w 宽输出。
a 显示终端上的所有进程,包括其他用户的进程。
r 只显示正在运行的进程。
u 以用户为主的格式来显示程序状况。
x 显示所有程序,不以终端机来区分。
常用的
ps -l
ps -ef
ps -aux