linux進程管理和計劃任務

1、進程的概念

 程序在執行的過程當中,會產生一些進程,它是由程序發送指令,而後從硬盤中讀取數據,調到內存當中。進程的發起是由三方產生,用戶→程序→做用對象。linux

2、進程的分類

進程主要分爲兩類
 前臺進程:前臺進程是由終端發起和控制,也就是說,前臺進程須要依靠於這個終端,若是終端關閉,該進程也自動關閉。
 後臺進程:後臺進程通常不會隨着終端的管理而關閉,他會在後臺自動運行。shell

3、守護進程

 守護進程也是後臺進程,這些進程會隨着系統的啓動而自動啓動,他們做爲服務會一直運行,它們不會關閉。vim

4、進程的建立

 全部的進程都是有init(CentOS6以前,CentOS7是sysetmd)所建立,一切進程都是有他所建立,能夠稱之爲全部進程的"祖先"全部的進程都是經過fork(),clone(),system()所建立,system()函數建立函數方法相對簡單,可是安全性不高,而fork()和exec()函數靈活性、速度、以及安全性比較好,因此通常都會使用這兩種方法來建立進程。centos

5、進程狀態顯示

R:running(運行)
S: interruptable sleeping(可中斷睡眠狀態)
D: uninterruptable sleeping(不可中斷睡眠狀態)
T: stopped(中止)
Z: zombie(殭屍)
+: 前臺進程
l: 多線程進程
L:內存分頁並帶鎖
N:低優先級進程
<: 高優先級進程
s: session leader,會話(子進程)發起者安全

6、進程優先級

系統優先級:在centos5以前進程優先級0-139,在centos6以後進程優先級0-98。
實時優先級:99-0,值越大,優先級有高,
nice值:-20到19,對應系統優先級100-139或99,通常設置系統優先級都是設置nice值。bash

linux進程管理和計劃任務

7、查看系統中的進程

靜態顯示當前系統資源使用率的命令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

8、進程管理工具

kill命令是想進城發送控制信號,進程根據信號來判斷動做。
經常使用選項
-0:無做爲,通常對於測試某進程是否開啓
-1:強制性的讓進程從新讀取配置文件
-2:終止正在運行的進程,至關於Ctrl+c
-3:至關於ctrl+\
-9:強制殺死正在運行的進程
-15:終止正在運行的進程
-18:繼續運行被暫定的進程
-19:把前臺的進程調到後臺休眠
跟kill做用相同的還有killall命令,該命令能夠不輸入PID號,直接輸入進程名, 只要是該進程名的進程都有效,通常針對於一個名字的好多進程ide

9、做業控制

當有一些執行時間比較長的命令,好比須要拷貝一些大文件到別的地方,則該終端將不可使用,這樣就用到了後臺運行命令
查看當前終端的做業命令是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大體相同不可被調回
以上三種方法均可以不依賴於任何終端的執行命令

10、並行運行命令

爲提升工做效率,對於一些沒有前後順序的命令,咱們能夠採用同時運行的方法從而實現提升命令的執行效率
方法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&}

11、計劃任務

使系統按期的執行一些操做
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
~
相關文章
相關標籤/搜索