輕鬆學Linux:
linux
job control就是 讓Linux在一個bash中能夠執行多個工做,其實就是bash中的多個子進程的工做.vim
這時候就有疑問了? linux不是自帶了 7個終端窗口麼 在這裏面執行多個工做不就能夠了麼,安全
是的,能夠 ,
bash
alt1-6 是六個命令行終端, 能夠互相切換
ide
alt+7 圖形界面終端 ,(ctrl+alt+f1切回到 linux命令行終端)spa
問題來了: 在一些對安全比較嚴謹的公司,都會限制用戶的登陸鏈接數(/etc/security/limits.conf)中設置, 用戶只能鏈接一個鏈接數,此時job control就有效了,!命令行
job control 分爲 前臺 foregroud 和 後臺 background進程
例子:
it
# tar -zpcf /tmp/etc.tar.gz /etc & [1] 8400 <== [job number] PID # tar: Removing leading `/' from member names # 在中括號內的號碼爲工做號碼 (job number),該號碼與 bash 的控制有關。 # 後續的 8400 則是這個工做在系統中的 PID。至於後續出現的數據是 tar 運行的數據流, # 由於咱們沒有加上數據流重導向,因此會影響畫面!不過不會影響前景的操做喔!
[root@www ~]# tar -zcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 & [1] 8429 [root@www ~]# |
呵呵!如此一來,輸出的資訊都給他傳送到 /tmp/log.txt 當中,固然就不會影響到咱們前景的做業了。 這樣說,您應該能夠更清楚數據流重導向的重要性了吧!^_^ |
[root@www ~]# jobs [-lrs]選項與參數: -l :除了列出 job number 與命令串以外,同時列出 PID 的號碼; -r :僅列出正在背景 run 的工做; -s :僅列出正在背景當中暫停 (stop) 的工做。範例一:觀察目前的 bash 當中,全部的工做,與對應的 PID[root@www ~]# jobs -l[1]- 10314 Stopped vim ~/.bashrc [2]+ 10833 Stopped find / -print
調用後臺的工做 fg fg+number便可 |
jobs 查看當前有多少工做table
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