進(jìn)程相關(guān)概念
內(nèi)核的功能
進(jìn)程管理、文件系統(tǒng)欠雌、網(wǎng)絡(luò)功能蹄梢、內(nèi)存管理、驅(qū)動(dòng)程序富俄、安全功能等禁炒。
process
進(jìn)程,正在運(yùn)行中的程序的一個(gè)副本霍比,是被加載到內(nèi)存中的指令集和幕袱。
- PID:進(jìn)程ID,標(biāo)記進(jìn)程悠瞬。
- init: linux中有一個(gè)總進(jìn)程init,這個(gè)是第一個(gè)進(jìn)程们豌,其他進(jìn)程都由這個(gè)總進(jìn)程創(chuàng)建涯捻。
進(jìn)程優(yōu)先級(jí)
- 系統(tǒng)優(yōu)先級(jí)(0--139):數(shù)字越小,優(yōu)先級(jí)越高望迎。
- 實(shí)時(shí)優(yōu)先級(jí)(99--0):值越大障癌,優(yōu)先級(jí)越高。靜態(tài)優(yōu)先級(jí)
- nice(-20--19):對(duì)應(yīng)系統(tǒng)的100--139 辩尊。動(dòng)態(tài)優(yōu)先級(jí)
- Big :時(shí)間復(fù)雜度涛浙,用戶和規(guī)模的關(guān)系。
- LRU算法:淘汰不用時(shí)間最長(zhǎng)的數(shù)據(jù)摄欲。
進(jìn)程的執(zhí)行需要環(huán)境蝗拿,我們稱(chēng)之為上下文(context),也就是包含一些進(jìn)程的屬性(進(jìn)程的執(zhí)行者蒿涎,PID哀托,selinux機(jī)制,組身份)linux內(nèi)核的進(jìn)程工作方式是:搶占式多任務(wù)(也就是分時(shí)操作系統(tǒng))劳秋。
進(jìn)程類(lèi)型
- 守護(hù)進(jìn)程:daemon仓手,在系統(tǒng)引導(dǎo)過(guò)程中啟動(dòng)的進(jìn)程,和終端無(wú)關(guān)進(jìn)程玻淑。系統(tǒng)啟動(dòng)后自動(dòng)加載到內(nèi)存中在后臺(tái)運(yùn)行嗽冒,也就是后臺(tái)進(jìn)程。
- 前臺(tái)進(jìn)程:跟終端相關(guān)补履,通過(guò)終端啟動(dòng)的進(jìn)程添坊。關(guān)閉終端就會(huì)中斷。
進(jìn)程狀態(tài)
運(yùn)行態(tài) running
就緒態(tài) ready
睡眠態(tài):可中斷 interruptable
不可中斷 UNinterruptable
停止態(tài):stopped 暫停于內(nèi)存箫锤,但不會(huì)被調(diào)度贬蛙,除非手動(dòng)啟動(dòng)
僵死態(tài):zombie 結(jié)束進(jìn)程,父進(jìn)程結(jié)束前谚攒,子進(jìn)程不關(guān)閉阳准,這種進(jìn)程已經(jīng)處于死狀態(tài),沒(méi)法再次殺死馏臭,只能進(jìn)行重啟系統(tǒng)才可以釋放內(nèi)存野蝇。
系統(tǒng)管理工具
進(jìn)程的分類(lèi)
- CPU-bound :CPU密集型,主要使用CPU進(jìn)行計(jì)算或邏輯判斷的進(jìn)程
- I/O-bound :IO密集型括儒,主要使用內(nèi)存和硬盤(pán)進(jìn)行讀寫(xiě)的進(jìn)程绕沈。
Linux系統(tǒng)狀態(tài)的查看及管理工具
pstree ps pidof pgrep top htop glance pmap vmstat dstat kill pkill job bg fg nohup
pstree
將進(jìn)程以樹(shù)狀結(jié)構(gòu)顯示,子進(jìn)程為葉子節(jié)點(diǎn)帮寻,其中用{ } 括起來(lái)的是線程乍狐。線程依附于進(jìn)程,不能獨(dú)立存在规婆,進(jìn)程是獨(dú)立內(nèi)存空間的澜躺,線程是可以共享內(nèi)存空間的,線程屬于輕量級(jí)的抒蚜。
知識(shí)小擴(kuò)展: 可以將
httpd
服務(wù)的進(jìn)程改為線程掘鄙,一般httpd
服務(wù)是新建一個(gè)進(jìn)程為用戶提供服務(wù),我們可以將其使用線程來(lái)為用戶提供服務(wù)嗡髓,這樣就可以節(jié)省內(nèi)存資源操漠。可以修改如下文件:vim /etc/sysconfig/httpd
將配置文件中的#HTTPD=/usr/sbin/httpd.worker
前的#
去掉饿这,使該配置生效浊伙,重啟服務(wù)就可以了:service httpd restart
ps
報(bào)告當(dāng)前進(jìn)程的快照(所謂的快照也就是當(dāng)前瞬間的狀態(tài))
Linux中各個(gè)進(jìn)程的相關(guān)信息都保存在/proc/目錄下,對(duì)應(yīng)各個(gè)進(jìn)程PID的文件夾长捧,里面有進(jìn)程的所有詳細(xì)信息嚣鄙。
- 支持三種選項(xiàng):
- UNIX選項(xiàng) 如-A -e 加-的選項(xiàng)風(fēng)格
- BSD選項(xiàng) 如a 不加-的選項(xiàng)風(fēng)格
- GNU選項(xiàng) 如--help --這種長(zhǎng)格式風(fēng)格
ps使用不同風(fēng)格的選項(xiàng)顯示結(jié)果是不同的,拿ps -a 這個(gè)例子來(lái)說(shuō)串结,
* ps a BSD風(fēng)格哑子,顯示比較詳細(xì)
* ps -a UNIX風(fēng)格,顯示不詳細(xì)肌割。這個(gè)是一個(gè)小小的區(qū)別卧蜓。
選項(xiàng):默認(rèn)顯示當(dāng)前終端中的進(jìn)程
? a 選項(xiàng)包括所有終端中的進(jìn)程
? x 選項(xiàng)包括不鏈接終端的進(jìn)程,也就是包括后臺(tái)(守護(hù))進(jìn)程
? u 選項(xiàng)顯示進(jìn)程所有者的信息
? f 選項(xiàng)顯示進(jìn)程的父進(jìn)程把敞,同時(shí)顯示父進(jìn)程的PPID
? k|--sort 屬性 對(duì)屬性排序
? o 屬性… 選項(xiàng)顯示定制的信息 弥奸,后可接以下的參數(shù),指定顯示特定的信息奋早,該選項(xiàng)必須放在所有選項(xiàng)的最后盛霎,緊跟參數(shù)。
pid耽装、comm摩渺、%cpu、%mem剂邮、state摇幻、VSZ、RSZ挥萌、tty绰姻、euser、ruser
對(duì)于帶有suid權(quán)限的二進(jìn)制命令來(lái)說(shuō)引瀑,該二進(jìn)制文件屬于A狂芋,當(dāng)另一個(gè)B用戶執(zhí)行該二進(jìn)制文件的時(shí)候,這個(gè)命令的生效者是A憨栽,而命令的發(fā)起者是B
-
參數(shù)的解釋?zhuān)?/p>
- VSZ: Virtual memory SiZe帜矾,虛擬內(nèi)存集翼虫,線性內(nèi)存
- RSS: ReSident Size, 常駐內(nèi)存集
- ni: nice值
- pri: priority 優(yōu)先級(jí)
- psr: processor CPU編號(hào)
- rtprio: 實(shí)時(shí)優(yōu)先級(jí)
- STAT:進(jìn)程狀態(tài)
- R:running
- S: interruptable sleeping
- D: uninterruptable sleeping
- T: stopped
- Z: zombie
- +: 前臺(tái)進(jìn)程
- l: 多線程進(jìn)程
- L:內(nèi)存分頁(yè)并帶鎖
- N:低優(yōu)先級(jí)進(jìn)程
- <: 高優(yōu)先級(jí)進(jìn)程
- s: session leader,會(huì)話(子進(jìn)程)發(fā)起者
常用組合
aux
auo
-efps -C commod 可顯示某一命令的進(jìn)程信息屡萤,-C 就是指command
-
進(jìn)程優(yōu)先級(jí)
- 進(jìn)程優(yōu)先級(jí)調(diào)整:
- 靜態(tài)優(yōu)先級(jí):100---139
進(jìn)程默認(rèn)啟動(dòng)時(shí)的nice 值是0珍剑,優(yōu)先級(jí)為120
只有root用戶才能降低nice值(提高優(yōu)先級(jí))
- 靜態(tài)優(yōu)先級(jí):100---139
- 進(jìn)程優(yōu)先級(jí)調(diào)整:
nice 命令
nice -n -10 命令 :指定命令執(zhí)行的優(yōu)先級(jí)
renice 命令:
renice 10 pid 調(diào)整正在運(yùn)行的進(jìn)程的優(yōu)先級(jí),重新設(shè)置進(jìn)程優(yōu)先級(jí)(-20----19)
- 查看進(jìn)程優(yōu)先級(jí)
ps axo pid,commod,nice 其中axo中的o必須放后面
pgrep
pgrep 工具:專(zhuān)門(mén)支持進(jìn)程搜索
pgrep [option]-u uid: effective user死陆,生效者
-U uid: real user招拙,真正發(fā)起運(yùn)行命令者
-t terminal: 與指定終端相關(guān)的進(jìn)程,指定終端措译。
-l: 顯示進(jìn)程名
-a: 顯示完整格式的進(jìn)程名
-P pid: 顯示指定進(jìn)程的子進(jìn)程
pgrep命令支持正則表達(dá)式:
pgrep -a "^vi.*"
pidof###
顯示服務(wù)或命令的進(jìn)程pid别凤,可以用來(lái)監(jiān)控服務(wù)
pidof bash 顯示命令的進(jìn)程號(hào)
如果某個(gè)服務(wù)沒(méi)有啟動(dòng),這時(shí)候查找不到進(jìn)程號(hào)领虹,這個(gè)時(shí)候的echo $?查看到的返回值為1 规哪,可以用這個(gè)原理進(jìn)行監(jiān)控功能服務(wù)是否正常,如果服務(wù)關(guān)閉了塌衰,可以重新啟動(dòng)由缆。
pidof httpd > /dev/null || systemctl restart httpd.service
tu!!!!!!!
uptime
顯示系統(tǒng)的負(fù)載均衡
顯示當(dāng)前時(shí)間,系統(tǒng)已啟動(dòng)的時(shí)間猾蒂、當(dāng)前上線人數(shù)均唉,系統(tǒng)平均負(fù)載(1、5肚菠、10分鐘的平均負(fù)載舔箭,一般不會(huì)超過(guò)1)(如果超過(guò)了1,說(shuō)明每一分鐘就會(huì)有一個(gè)進(jìn)程在等待蚊逢,完成不了层扶。)
-
系統(tǒng)平均負(fù)載:
指在特定時(shí)間間隔內(nèi)運(yùn)行隊(duì)列中的平均進(jìn)程數(shù)
通常每個(gè)CPU內(nèi)核的當(dāng)前活動(dòng)進(jìn)程數(shù)不大于3,那么系統(tǒng)的性能良好烙荷。如果每個(gè)CPU內(nèi)核的任務(wù)數(shù)大于5镜会,那么此主機(jī)的性能有嚴(yán)重問(wèn)題
如果linux主機(jī)是1個(gè)雙核CPU,當(dāng)Load Average 為6的時(shí)候說(shuō)明機(jī)器已經(jīng)被充分使用
tu!!!!!!!!
top
進(jìn)程監(jiān)視工具
(空間概念:用戶空間(應(yīng)用程序不需要使用內(nèi)核终抽,該程序的進(jìn)程就在用戶空間中進(jìn)行)內(nèi)核空間(應(yīng)用程序的進(jìn)程需要加載內(nèi)核進(jìn)行戳表,內(nèi)核所使用的空間就是內(nèi)核空間)
排序
P:以占據(jù)的CPU百分比,%CPU
M:占據(jù)內(nèi)存百分比,%MEM
T:累積占據(jù)CPU時(shí)長(zhǎng),TIME+
首部信息顯示
uptime信息: l命令
tasks及cpu信息: t命令
cpu分別顯示: 1 (數(shù)字)
memory信息: m命令
退出命令: q
修改刷新時(shí)間間隔: s
終止指定進(jìn)程: k
保存文件: W(大寫(xiě))
欄位信息簡(jiǎn)介
us:用戶空間
sy:內(nèi)核空間
ni:調(diào)整nice時(shí)間
id:空閑
wa:等待IO時(shí)間
hi:硬中斷
si:軟中斷(模式切換)
st:虛擬機(jī)偷走的時(shí)間
-
進(jìn)入top之前可以指定選項(xiàng):
- 選項(xiàng):
-d #: 指定刷新時(shí)間間隔,默認(rèn)為3秒
-b: 全部顯示所有進(jìn)程
-n #: 刷新多少次后退出
- 選項(xiàng):
進(jìn)入top后有如下快捷鍵:
按t
可以打開(kāi)和關(guān)閉'tasks行' 和'%CPU行'(centos6)(centos7中會(huì)有些不一樣)
按1
可以顯示所有CPU內(nèi)核的利用率
按m
可以打開(kāi)和關(guān)閉'Mem行'和'Swap行'
按s
可以輸入數(shù)字昼伴,修改刷新時(shí)間間隔
按l
可以打開(kāi)和關(guān)閉首部的top行信息
按k
可以輸入進(jìn)程的PID殺死進(jìn)程
htop
**需從Fedora-EPEL源安裝**
選項(xiàng):
-d #: 指定延遲時(shí)間匾旭;
-u UserName: 僅顯示指定用戶的進(jìn)程
-s COLUME: 以指定字段進(jìn)行排序
子命令:
s: 跟蹤選定進(jìn)程的系統(tǒng)調(diào)用
l: 顯示選定進(jìn)程打開(kāi)的文件列表
a:將選定的進(jìn)程綁定至某指定CPU核心
t: 顯示進(jìn)程樹(shù)
內(nèi)存工具
vmstat
虛擬內(nèi)存信息
-s: 顯示內(nèi)存的統(tǒng)計(jì)數(shù)據(jù)
vmstat 2 加一個(gè)數(shù)字是指定每隔幾秒刷新一次,
vmstat 2 5 加兩個(gè)數(shù)字圃郊,前一個(gè)數(shù)字是表示每隔多少秒刷新一次价涝,后一個(gè)數(shù)字是指刷新多少次退出。
-
vmstat 命令結(jié)果中的菜單項(xiàng)
- procs:
r:可運(yùn)行(正運(yùn)行或等待運(yùn)行)進(jìn)程的個(gè)數(shù)持舆,和核心數(shù)有關(guān)
b:處于不可中斷睡眠態(tài)的進(jìn)程個(gè)數(shù)(被阻塞的隊(duì)列的長(zhǎng)度) - memory:
**swpd: **交換內(nèi)存的使用總量
free:空閑物理內(nèi)存總量
buffer:用于buffer的內(nèi)存總量
cache:用于cache的內(nèi)存總量 - swap:
si:從磁盤(pán)交換進(jìn)內(nèi)存的數(shù)據(jù)速率(kb/s)
so:從內(nèi)存交換至磁盤(pán)的數(shù)據(jù)速率(kb/s)
io:
bi:從塊設(shè)備讀入數(shù)據(jù)到系統(tǒng)的速率(kb/s)
**bo: **保存數(shù)據(jù)至塊設(shè)備的速率 - system:
in: interrupts 中斷速率色瘩,包括時(shí)鐘
cs: context switch 進(jìn)程切換速率 - cpu:
us:Time spent running non-kernel code (用戶空間利用率)
sy:Time spent running kernel code (系統(tǒng)內(nèi)核空間利用率)
id:Time spent idle. Linux 2.5.41前,包括IO-wait time.(CPU空閑百分比)
wa: Time spent waiting for IO. 2.5.41前伪窖,包括in idle. (CPU等待IO時(shí)間)
st: Time stolen from a virtual machine. 2.6.11前, unknown.(被偷走的內(nèi)存空間)
- procs:
iostat
統(tǒng)計(jì)CPU和設(shè)備IO信息
示例
iostat 1 10
iostat 2 加一個(gè)數(shù)字是指定每隔幾秒刷新一次,
iostat 2 5 加兩個(gè)數(shù)字居兆,前一個(gè)數(shù)字是表示每隔多少秒刷新一次覆山,后一個(gè)數(shù)字是指刷新多少次退出。
pmap
進(jìn)程對(duì)應(yīng)的內(nèi)存映射,進(jìn)程的運(yùn)行占用內(nèi)存的地址對(duì)應(yīng)關(guān)系
- pmap [options] pid [...]
-x | -d : 顯示詳細(xì)格式的信息- 示例:pmap 1
另外一種實(shí)現(xiàn):
cat /proc/PID/maps
- 示例:pmap 1
系統(tǒng)監(jiān)控工具
glances
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-Ppassword] [--password] [-t refresh] [-f file] [-o output]
內(nèi)建命令:
a Sort processes automatically
l Show/hide logs
c Sort processes by CPU%
b Bytes or bits for network I/O
m Sort processes by MEM%
w Delete warning logs
p Sort processes by name
x Delete warning and critical logs
i Sort processes by I/O rate
1 Global CPU or per-CPU stats
d Show/hide disk I/O stats
h Show/hide this help screen
f Show/hide file system stats
t View network I/O as combination
n Show/hide network stats
u View cumulative network I/O
s Show/hide sensors stats
q Quit (Esc and Ctrl-C also work)
y Show/hide hddtemp stats
常用選項(xiàng):
-b: 以Byte為單位顯示網(wǎng)卡數(shù)據(jù)速率
-d: 關(guān)閉磁盤(pán)I/O模塊
-f /path/to/somefile: 設(shè)定輸入文件位置
-o {HTML|CSV}:輸出格式
-m: 禁用mount模塊
-n: 禁用網(wǎng)絡(luò)模塊
-t #: 延遲時(shí)間間隔
-1:每個(gè)CPU的相關(guān)數(shù)據(jù)單獨(dú)顯示
- C/S模式下運(yùn)行g(shù)lances命令
-
服務(wù)器模式:
glances -s -B IPADDR
IPADDR: 指明監(jiān)聽(tīng)的本機(jī)哪個(gè)地址
也可以不指定-B IPADDR史辙,這樣默認(rèn)監(jiān)聽(tīng)本機(jī)上所有的端口汹买,客戶端可以通過(guò)任意一個(gè)本機(jī)的IP地址進(jìn)行監(jiān)控佩伤。一旦-B IPADDR之后聊倔,就將glances服務(wù)器端綁定到了固定的Ip上,客戶端只有通過(guò)綁定的IP地址才可以進(jìn)行監(jiān)控生巡。 -
客戶端模式:
glances -c IPADDR
IPADDR:要連入的服務(wù)器端地址
-
服務(wù)器模式:
dstat
系統(tǒng)資源統(tǒng)計(jì),代替vmstat,iostat
- dstat [-afv] [options..] [delay [count]]
-c: 顯示cpu相關(guān)信息
-C #,#,...,total
-d: 顯示disk相關(guān)信息
-D total,sda,sdb,...
-g:顯示page相關(guān)統(tǒng)計(jì)數(shù)據(jù)
-m: 顯示memory相關(guān)統(tǒng)計(jì)數(shù)據(jù)
-n: 顯示network相關(guān)統(tǒng)計(jì)數(shù)據(jù)
-p: 顯示process相關(guān)統(tǒng)計(jì)數(shù)據(jù)
-r: 顯示io請(qǐng)求相關(guān)的統(tǒng)計(jì)數(shù)據(jù)
-s: 顯示swapped相關(guān)的統(tǒng)計(jì)數(shù)據(jù)
kill
向進(jìn)程發(fā)送控制信號(hào)耙蔑,以實(shí)現(xiàn)對(duì)進(jìn)程管理,每個(gè)信號(hào)對(duì)應(yīng)一個(gè)數(shù)字,信號(hào)名稱(chēng)以SIG開(kāi)頭(可省略)孤荣,不區(qū)分大小寫(xiě)甸陌,kill命令默認(rèn)發(fā)送15代碼信號(hào)。
顯示當(dāng)前系統(tǒng)可用信號(hào): kill –l,trap -l
常用信號(hào):man 7 signal
kill命令并不是只是用來(lái)殺死進(jìn)程的盐股,它是用來(lái)給進(jìn)程發(fā)送信號(hào)的钱豁,所謂的殺死進(jìn)程其實(shí)是,給進(jìn)程發(fā)送信號(hào)疯汁,讓進(jìn)程自己自動(dòng)終結(jié)牲尺。
1) SIGHUP: 無(wú)須關(guān)閉進(jìn)程而讓其重讀配置文件
2) SIGINT: 中止正在運(yùn)行的進(jìn)程;相當(dāng)于Ctrl+c
3) SIGQUIT:相當(dāng)于ctrl+\
9) SIGKILL: 強(qiáng)制殺死正在運(yùn)行的進(jìn)程
15) SIGTERM:終止正在運(yùn)行的進(jìn)程
18) SIGCONT:繼續(xù)運(yùn)行
19) SIGSTOP:后臺(tái)休眠
指定信號(hào)的方法:
(1) 信號(hào)的數(shù)字標(biāo)識(shí):1, 2, 9
(2) 信號(hào)完整名稱(chēng):SIGHUP (3) 信號(hào)的簡(jiǎn)寫(xiě)名稱(chēng):HUP
kill -0 pid 使用0信號(hào)幌蚊,可以對(duì)進(jìn)程進(jìn)行錯(cuò)誤檢查谤碳。如果進(jìn)程不正常,會(huì)返回錯(cuò)誤信息溢豆,返回值為非0蜒简,如果進(jìn)程正常返回正確的0值,這個(gè)可以用來(lái)檢測(cè)進(jìn)程是否正常漩仙。
對(duì)于有些進(jìn)程是不能殺死的搓茬,例如tty2、tty3队他、tty4垮兑、tty5、tty6這些控制臺(tái)進(jìn)程是殺不死的漱挎。
kill (tty)pid (默認(rèn)發(fā)送15代碼信號(hào))殺不死
kill -9 (tty)pid 殺不死
可以有殺死的辦法:
先將所有進(jìn)程的父進(jìn)程pid=1 init這個(gè)進(jìn)程殺死系枪。雖然殺不死,但是會(huì)對(duì)init這個(gè)進(jìn)程造成一定得傷害磕谅,使init進(jìn)程自身的一些功能受到一些破壞私爷,造成進(jìn)程的不完整性雾棺。
這個(gè)時(shí)候再次進(jìn)行kill -9 tty(pid) 就會(huì)把控制臺(tái)終端進(jìn)程殺死。
Killall衬浑、pkill
killall Pname :指定進(jìn)程名捌浩,可以批量殺死進(jìn)程,不需要一個(gè)個(gè)指定進(jìn)程編號(hào)那么麻煩工秩。
- pkill [options] pattern
-
option
-SIGNAL
-u uid: effective user尸饺,生效者
-U uid: real user,真正發(fā)起運(yùn)行命令者
-t terminal: 與指定終端相關(guān)的進(jìn)程
-l: 顯示進(jìn)程名(pgrep可用)
-a: 顯示完整格式的進(jìn)程名(pgrep可用)
-P pid: 顯示指定進(jìn)程的子進(jìn)程
可加選項(xiàng)指定特定進(jìn)程特定的條件將進(jìn)程殺死助币。
-
option
作業(yè)管理
Linux的作業(yè)控制
前臺(tái)作業(yè):通過(guò)終端啟動(dòng)浪听,且啟動(dòng)后一直占據(jù)終端;
后臺(tái)作業(yè):可通過(guò)終端啟動(dòng)眉菱,但啟動(dòng)后即轉(zhuǎn)入后臺(tái)運(yùn)行(釋放終端)
作業(yè)在后臺(tái)有兩種狀態(tài):后臺(tái)運(yùn)行迹栓、后臺(tái)休眠
(1) 運(yùn)行中的作業(yè): Ctrl+z 將作業(yè)放入后臺(tái)休眠
(2) 尚未啟動(dòng)的作業(yè):# COMMAND & 命令后加上& 符號(hào)
后臺(tái)作業(yè)雖然被送往后臺(tái)運(yùn)行,但其依然與終端相關(guān)俭缓;退出終端克伊,將關(guān)閉后臺(tái)作業(yè)。如果希望送往后臺(tái)后华坦,剝離與終端的關(guān)系
- nohup COMMAND &
例如:nohup ping 127.0.1 & 關(guān)閉終端后愿吹,作業(yè)仍然在后臺(tái)進(jìn)行作業(yè)不會(huì)中斷。 - screen;COMMAND
這個(gè)是新開(kāi)一個(gè)screen惜姐,將作業(yè)放進(jìn)去執(zhí)行犁跪。
查看當(dāng)前終端所有作業(yè)
# jobs 顯示后臺(tái)作業(yè)的編號(hào)
作業(yè)控制
# fg [作業(yè)的編號(hào)]:把指定的后臺(tái)作業(yè)調(diào)回前臺(tái)
# bg [作業(yè)的編號(hào)]:讓送往后臺(tái)的作業(yè)在后臺(tái)繼續(xù)運(yùn)行
# kill [%作業(yè)的編號(hào)]: 終止指定的作業(yè)(作業(yè)編號(hào)前要加%)
作業(yè)并行運(yùn)行
同時(shí)運(yùn)行多個(gè)進(jìn)程,提高效率载弄,這個(gè)思想也可以作用與命令耘拇,可以讓不同的命令并行執(zhí)行。方法1
vi all.sh
編寫(xiě)一個(gè)腳本宇攻,在腳本中添加不同的腳本或命令惫叛,在每一個(gè)腳本或命令后加上一個(gè)&
符號(hào)
f1.sh&
f2.sh&
f3.sh&
方法2
(f1.sh&);(f2.sh&);(f3.sh&)
可以作用與腳本或命令
方法3
{ f1.sh& f2.sh& f3.sh& }
可以作用與腳本或命令
任務(wù)計(jì)劃
- 執(zhí)行一次:
at
在指定的時(shí)間點(diǎn)執(zhí)行一次指定的命令 - 空閑時(shí)執(zhí)行:
batch
系統(tǒng)自動(dòng)選擇空閑的時(shí)間去執(zhí)行指定的命令(也就是系統(tǒng)負(fù)載較低的情況下) - 周期性執(zhí)行:
cron
根據(jù)指定的時(shí)間自動(dòng)的周期性執(zhí)行指定的動(dòng)作。
at
(交互式任務(wù)計(jì)劃逞刷,按Ctrl + D 完成指定任務(wù)退出交互)
可以通過(guò)管道和重定向?qū)⒂?jì)劃任務(wù)輸入at嘉涌,例如:
cat at.txt | at 14:00
at 14:00 < at.txt
首先需要安裝at包
安裝完后需要啟動(dòng)該服務(wù),在不同的操作系統(tǒng)下服務(wù)位置不同夸浅,例如:
centos6中
/etc/rc.d/init.d/atd 服務(wù)路徑
service atd start 啟動(dòng)服務(wù)
centos7中
/usr/lib/systemd/system/atd.service 服務(wù)路徑
systemctl start atd.service 啟動(dòng)服務(wù)
chkconfig atd.service on 指定開(kāi)機(jī)自啟動(dòng)
- 常用選項(xiàng):
-V 顯示版本信息:
-l 列出指定隊(duì)列中等待運(yùn)行的作業(yè)仑最;相當(dāng)于atq
-d:刪除指定的作業(yè);相當(dāng)于atrm
-c 查看具體作業(yè)任務(wù)
-f /path/from/somefile:從指定的文件中讀取任務(wù)
-m 當(dāng)任務(wù)被完成之后帆喇,將給用戶發(fā)送郵件警医,即使沒(méi)有標(biāo)準(zhǔn)輸出
注意:作業(yè)執(zhí)行命令的結(jié)果中的標(biāo)準(zhǔn)輸出和錯(cuò)誤以郵件通知給相關(guān)用戶
**時(shí)間格式**:
可以在具提的時(shí)間點(diǎn)后加上時(shí)間來(lái)指定執(zhí)行的時(shí)間,例如:
at now + 5 minutes
時(shí)間點(diǎn)有:noon(12:00) midnight(24:00) teatime(16:00) tomorrow
now + {minutes,hours,days, OR weeks}
HH:MM 02:00
在今日的 HH:MM 進(jìn)行,若該時(shí)刻已過(guò)预皇,則明天此時(shí)執(zhí)行任務(wù)
HH:MM YYYY-MM-DD 02:00 2016-09-20
規(guī)定在某年某月的某一天的特殊時(shí)刻進(jìn)行該項(xiàng)任務(wù)
HH:MM[am|pm] [Month] [Date]
04pm March 17
17:20 tomorrow
HH:MM[am|pm] + number [minutes|hours|days|weeks]
在某個(gè)時(shí)間點(diǎn)再加幾個(gè)時(shí)間后才進(jìn)行該項(xiàng)任務(wù)
now + 5 minutes
02pm + 3 days
at 任務(wù)隊(duì)列存放在:/var/spool/at/目錄中
并不是所有的用戶都可以使用at命令:
安裝過(guò)at命令后會(huì)有兩個(gè)文件:
白名單:/etc/at.allow 默認(rèn)不存在
黑名單:/etc/at.deny 默認(rèn)存在
白名單和黑名單中放用戶名侈玄,有如下幾種情況:
兩個(gè)文件都不存在,只有root用戶可以使用at計(jì)劃任務(wù)
如果不存在白明單吟温,不在黑名單中的用戶可以使用at命令序仙。
存在白名單,白名單的優(yōu)先級(jí)高于黑名單鲁豪,有白名單黑名單就不起作用潘悼,不在白名單中的用戶不能使用at命令。
cron
周期性計(jì)劃任務(wù)(計(jì)劃任務(wù)中不要有標(biāo)準(zhǔn)輸出爬橡,否則會(huì)以郵件方式發(fā)送個(gè)管理員)
相關(guān)的程序包:
cronie: 主程序包治唤,提供crond守護(hù)進(jìn)程及相關(guān)輔助工具
cronie-anacron:cronie的補(bǔ)充程序,用于監(jiān)控cronie任務(wù)執(zhí)行狀況堤尾,如cronie中的任務(wù)在過(guò)去該運(yùn)行的時(shí)間點(diǎn)未能正常運(yùn)行肝劲,則anacron會(huì)隨后啟動(dòng)一次此任務(wù)
crontabs:包含CentOS提供系統(tǒng)維護(hù)任務(wù)
創(chuàng)建周期性任務(wù)的命令是主程序包提供的crontab命令:/usr/bin/crontab
首先要保證crond.service 服務(wù)開(kāi)啟
centos6 :service crond.service start
centos7 :systemctl start crond.service
周期性計(jì)劃任務(wù)的日志在:/var/log/cron
- 創(chuàng)建周期性計(jì)劃任務(wù)有兩種方法:
- 一迁客、通過(guò)編輯文件:/etc/crontab
在該文件中編輯指定時(shí)間就可以了格式為:
* * * * * user command - 二郭宝、通過(guò)命令進(jìn)行指定:
crontab -e 該命令一執(zhí)行就會(huì)自動(dòng)進(jìn)入編輯類(lèi)似于/etc/crontab的文件,格式也是:
* * * * * user command
- 一迁客、通過(guò)編輯文件:/etc/crontab
- 時(shí)間表示法:
- (1) 特定值
給定時(shí)間點(diǎn)有效取值范圍內(nèi)的值- (2) *
給定時(shí)間點(diǎn)上有效取值范圍內(nèi)的所有值
表示“每...”- (3) 離散取值
#,#,# 1,4,6
- 時(shí)間表示法
- (4) 連續(xù)取值
#-# 6-19
(5) 在指定時(shí)間范圍上掷漱,定義步長(zhǎng)
/#: #即為步長(zhǎng) 例如:*/5(沒(méi)五分鐘執(zhí)行一次)
在文件中也可以這樣編輯:
例如
@reboot root echo nihao 每次重啟之后以root身份執(zhí)行命令粘室。
@yearly root echo nihao 每年執(zhí)行一次
@reboot Run once after reboot.
- @yearly 0 0 1 1 *
+ @annually 0 0 1 1 *
+ @monthly 0 0 1 * *
+ @weekly 0 0 * * 0
+ @daily 0 0 * * *
+ @hourly 0 * * * *
示例:每3小時(shí)echo和wall命令
0 */3 * * * centos /bin/echo “howdy”;/usr/bin/wall “welcome to jiakehome!”
系統(tǒng)的計(jì)劃任務(wù):
/etc/crontab
/etc/cron.d/ 配置文件
/etc/cron.hourly/ 腳本
/etc/cron.daily/ 腳本
/etc/cron.weekly/ 腳本
/etc/cron.monthly/腳本
定義了每周、每天卜范、每月衔统、每小時(shí)要執(zhí)行的計(jì)劃任務(wù)
選項(xiàng)
-l: 列出所有任務(wù);
-e: 編輯任務(wù)海雪;
-r: 移除所有任務(wù)锦爵;
-i:同-r一同使用,以交互式模式移除指定任務(wù)
-u user: 僅root可運(yùn)行奥裸,指定用戶管理cron任務(wù)
crontab這命令任何用戶都可以使用险掀,它也有白名單和黑名單,
白名單:/etc/cron.allow 默認(rèn)不存在
黑名單:/etc/cron.deny 默認(rèn)存在
白名單和黑名單中放用戶名湾宙,有如下幾種情況:
兩個(gè)文件都不存在樟氢,只有root用戶可以使用at計(jì)劃任務(wù)
如果不存在白明單,不在黑名單中的用戶可以使用at命令侠鳄。
存在白名單埠啃,白名單的優(yōu)先級(jí)高于黑名單,有白名單黑名單就不起作用伟恶,不在白名單中的用戶不能使用at命令碴开。
每當(dāng)有用戶創(chuàng)建一個(gè)周期性執(zhí)行任務(wù)的時(shí)候都會(huì)在/var/spool/cron/目錄下有一個(gè)對(duì)應(yīng)的用戶文件。該文件就是對(duì)應(yīng)用戶的周期性執(zhí)行任務(wù)的cron文件博秫,每個(gè)用戶只有一個(gè)對(duì)應(yīng)用戶名字的文件潦牛,如果用戶想多次創(chuàng)建多個(gè)周期性計(jì)劃任務(wù)鹃骂,則打開(kāi)的是同一個(gè)文件。
當(dāng)作業(yè)需要精確到秒級(jí)別的時(shí)候可以使用sleep命令來(lái)配合操作罢绽,例如:
* * * * * root for A in {0-9};do echo $A;sleep 20; done
還可以通過(guò)sleep 定義各種時(shí)長(zhǎng):
sleep 數(shù)字[prefix]
prefix : s 秒畏线,默認(rèn)
d 天,
m 分良价,
h 小時(shí)寝殴,
crontab -e 默認(rèn)使用的是vi工具打開(kāi)的文件,可以在/etc/profile.d/目錄下定義一個(gè)環(huán)境變量:
export EDITOR=vim
就可以默認(rèn)使用vim 編輯器打開(kāi)了明垢。
蚣常!*!對(duì)于cron任務(wù)來(lái)講痊银,%有特殊用途抵蚊;如果在命令中要使用%,則需要轉(zhuǎn)義溯革,將%放置于單引號(hào)中贞绳,則可不用轉(zhuǎn)義
注意:運(yùn)行結(jié)果的標(biāo)準(zhǔn)輸出和錯(cuò)誤以郵件通知給相關(guān)用戶
(1) COMMAND > /dev/null
(2) COMMAND &> /dev/null
anacron系統(tǒng)
? 運(yùn)行計(jì)算機(jī)關(guān)機(jī)時(shí)cron不運(yùn)行的任務(wù),CentOS6以后版本取消anacron服務(wù)致稀,由crond服務(wù)管理
? 對(duì)筆記本電腦冈闭、臺(tái)式機(jī)、工作站抖单、偶爾要關(guān)機(jī)的服務(wù)器及其它不一直開(kāi)機(jī)的系統(tǒng)很重要對(duì)很有用
配置文件:/etc/anacrontab萎攒,負(fù)責(zé)執(zhí)行/etc/ cron.daily
/etc/cron.weekly /etc/cron.monthly中系統(tǒng)任務(wù)。
? 字段1:如果在這些日子里沒(méi)有運(yùn)行這些任務(wù)……
? 字段2:在重新引導(dǎo)后等待這么多分鐘后運(yùn)行它
? 字段3:任務(wù)識(shí)別器矛绘,在日志文件中標(biāo)識(shí)
? 字段4:要執(zhí)行的任務(wù)
- 由/etc/cron.hourly/0anacron執(zhí)行
- 當(dāng)執(zhí)行任務(wù)時(shí)耍休,更新/var/spool/anacron/cron.daily 文件
的時(shí)間戳
知識(shí)小擴(kuò)展
windows遠(yuǎn)程桌面連接:運(yùn)行輸入"mstsc",打開(kāi)遠(yuǎn)程連接終端。輸入對(duì)方的IP地址货矮。
內(nèi)存泄漏:應(yīng)用程序占用內(nèi)存不釋放羊精,造成內(nèi)存占用越來(lái)越大。
例如應(yīng)用程序打開(kāi)數(shù)據(jù)庫(kù)次屠,不進(jìn)行關(guān)閉园匹,造成占用內(nèi)存不釋放。
可以使用pmap 內(nèi)存工具查看某一進(jìn)程內(nèi)存占用情況劫灶。
更改httpd服務(wù)的主目錄
- 原網(wǎng)頁(yè)存放目錄:
/var/www/html
- 需要修改的文件:
/etc/httpd/conf/httpd.conf
- 將
DecumentRoot "PATH"
PATH
改為你指定的目錄kill -1 httpd
進(jìn)程編號(hào) 讓該服務(wù)重新讀配置文件使更改后的配置文件生效裸违。
echo $$
查看當(dāng)前bash
的進(jìn)程編號(hào)
crontab -e -Uwang
編輯的文件,默認(rèn)是vi
打開(kāi)本昏,定義環(huán)境變量可以使用vim打開(kāi):export EDITOR=vim
計(jì)劃任務(wù)中的任務(wù)不要帶輸出供汛,否則會(huì)給指定用戶發(fā)郵件。