程序在執行的過程當中,會產生一些進程,它是由程序發送指令,而後從硬盤中讀取數據,調到內存當中。進程的發起是由三方產生,用戶→程序→做用對象。linux
進程主要分爲兩類
前臺進程:前臺進程是由終端發起和控制,也就是說,前臺進程須要依靠於這個終端,若是終端關閉,該進程也自動關閉。
後臺進程:後臺進程通常不會隨着終端的管理而關閉,他會在後臺自動運行。shell
守護進程也是後臺進程,這些進程會隨着系統的啓動而自動啓動,他們做爲服務會一直運行,它們不會關閉。vim
全部的進程都是有init(CentOS6以前,CentOS7是sysetmd)所建立,一切進程都是有他所建立,能夠稱之爲全部進程的"祖先"全部的進程都是經過fork(),clone(),system()所建立,system()函數建立函數方法相對簡單,可是安全性不高,而fork()和exec()函數靈活性、速度、以及安全性比較好,因此通常都會使用這兩種方法來建立進程。centos
R:running(運行)
S: interruptable sleeping(可中斷睡眠狀態)
D: uninterruptable sleeping(不可中斷睡眠狀態)
T: stopped(中止)
Z: zombie(殭屍)
+: 前臺進程
l: 多線程進程
L:內存分頁並帶鎖
N:低優先級進程
<: 高優先級進程
s: session leader,會話(子進程)發起者安全
系統優先級:在centos5以前進程優先級0-139,在centos6以後進程優先級0-98。
實時優先級:99-0,值越大,優先級有高,
nice值:-20到19,對應系統優先級100-139或99,通常設置系統優先級都是設置nice值。bash
靜態顯示當前系統資源使用率的命令ps,ps命令在選項上有三種格式分別是 :UNIX、BSD、GNU,這裏主要以BSD選項來講明
選項
默認顯示當前終端中的進程
a:顯示都有終端的進程
x:顯示全部後臺進程
u:顯示進程全部者
f:顯示進程的父進程
k 屬性:針對指定屬性進程排序
o 屬性1,屬性2:顯示定製信息,均可以定製:user(執行用戶),pid(進程號 )、comm(進程名)、%cp(cpu)u、%mem(內存)、state(狀態)、tty(終端)、euser(執行人)、ruser(發起人)、cmd(命令),vsz(承諾內存)rss(實際內存)time(運行時間),ni(nice值),pri(優先級),psr(CPU編號),rtprio(實時優先級)等等session
[root@centos6 bin]#ps aux |head -5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 19236 1500 ? Ss 08:09 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S 08:09 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 08:09 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S 08:09 0:00 [ksoftirqd/0]
動態顯示當前系統使用狀況top命令
能夠動態的監控系統資源使用狀況多線程
top - 10:07:50 up 1:57, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie Cpu(s): 0.8%us, 2.2%sy, 0.0%ni, 96.8%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st Mem: 1906256k total, 209412k used, 1696844k free, 11132k buffers Swap: 2097148k total, 0k used, 2097148k free, 59652k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19236 1500 1228 S 0.0 0.1 0:01.75 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
dstat命令顯示當前系統資源使用狀況統計app
[root@centos6 etc]#dstat #默認顯示 ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- usr sys idl wai hiq siq| read writ| recv send| in out | int csw 0 1 99 0 0 0|2462B 2358B| 0 0 | 0 0 | 33 61 0 0 100 0 0 0| 0 0 |1524B 838B| 0 0 | 21 10 0 0 100 0 0 0| 0 0 |1584B 358B| 0 0 | 33 17 1 0 99 0 0 0| 0 0 |1704B 358B| 0 0 | 22 10 0 1 99 0 0 0| 0 0 |1796B 358B| 0 0 | 29 14 0 0 100 0 0 0| 0 0 |1856B 358B| 0 0 | 29 14 1 1 98 0 0 0| 0 156k|1856B 358B| 0 0 | 50 25
kill命令是想進城發送控制信號,進程根據信號來判斷動做。
經常使用選項
-0:無做爲,通常對於測試某進程是否開啓
-1:強制性的讓進程從新讀取配置文件
-2:終止正在運行的進程,至關於Ctrl+c
-3:至關於ctrl+\
-9:強制殺死正在運行的進程
-15:終止正在運行的進程
-18:繼續運行被暫定的進程
-19:把前臺的進程調到後臺休眠
跟kill做用相同的還有killall命令,該命令能夠不輸入PID號,直接輸入進程名, 只要是該進程名的進程都有效,通常針對於一個名字的好多進程ide
當有一些執行時間比較長的命令,好比須要拷貝一些大文件到別的地方,則該終端將不可使用,這樣就用到了後臺運行命令
查看當前終端的做業命令是jobs
當執行佔用終端時間長的命令時,能夠用Ctrl+z暫停並放入後臺以下
[root@centos6 bin]#ping 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.020 ms ^Z [1]+ Stopped ping 127.0.0.1
可是終端是釋放了,可是命令也跟着暫停了,那麼就可使用bg來放入後臺繼續運行,若是想要把後臺的程序從新調到前臺則可使用fg。
根據上述描述,命令佔用終端是解決的了,可是這些命令仍是基於當前終端來運行的, 若是將當前終端關閉,那麼對於當前終端所執行的全部命令也將被終端,那麼仍是不夠完美。
想要把運行命令改變成不終端的方法有三種
方法一:nohup 命令 &>/dev/null
方法二:在終端中輸入screen,會進入一個新的shell,這個shell不基於任何bash,就算終端關閉 ,在該終端中的全部操做也不會被關閉,該命令的優勢還有若是有須要從新調回命令,還能夠從新鏈接,根據screen -ls 查看會話screen -x 會話名從新鏈接
方法三:(命令) 該方法跟nohup大體相同不可被調回
以上三種方法均可以不依賴於任何終端的執行命令
爲提升工做效率,對於一些沒有前後順序的命令,咱們能夠採用同時運行的方法從而實現提升命令的執行效率
方法1、寫腳本,讓一個總的腳本調用多個腳本,而且把多個腳本放入後臺運行
以下所示:同時調用多個腳本而且把多個腳本同時放入後臺運行
[root@centos6 bin]#cat bingxing.sh #!/bin/bash jiaoben1.sh& jiaoben2.sh& jiaoben3.sh&
方法2、用()來把全部腳本,命令調入後臺,多進程執行
[root@centos6 bin]#(jiaoben1.sh&);(jiaoben2.sh&);(jiaoben3.sh&)
方法3、用{}來把全部進程放入後臺
[root@centos6 bin]#{jiaoben1.sh& jiaoben2.sh& jiaoben3&}
使系統按期的執行一些操做
at:讓系統在將來執行某些任務,好比發個廣播
選項
-l:查看指定隊列中等待的計劃任務,若是計劃任務已經執行將再也不顯示。
-d:刪除指定的計劃任務
-c:查看計劃任務的詳細信息
-f 文件:從指定文件中歐讀取任務
-m:當計劃任務被執行後,將給用戶發送郵件,即便咩有標準輸出,也會發送一個空郵件給用戶
[root@centos6 app]#at 15:30 #建立在15點30分是發送一個廣播 at> wall test at> <EOT> job 8 at 2018-03-18 15:30 [root@centos6 app]#at -l #查看計劃任務 8 2018-03-18 15:30 a root
crontab:讓系統在規定的時間循環執行某些操做
系統級計劃任務,直接編輯配置文件,文件格式以下。
[root@centos6 app]#vim /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 分鐘 小時 日 月 星期 用戶 操做 #計劃任務分爲這幾列
注:當計劃任務的服務沒有啓用,計劃任務將再也不執行。
建立用戶級計劃任務
[root@centos6 app]#crontab -e #默認那個用戶編輯,將是哪個用戶的計劃任務 00 8 * * * /testdir/1.sh #在天天的8點執行指定的腳本,格式同上一一致
還能夠指定在哪個時刻指定某目錄下的全部計劃任務
[root@centos6 etc]#vim /etc/cron.d/0hourly #能夠在該文件下指定時間而且指定須要指定腳本的目錄run-parts是一個命令, HELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ 01 * * * * root run-parts /etc/cron.hourly ~