進程管理 計劃任務管理

進程管理 計劃任務管理

1 進程管理

進程和程序的卻別:一個時動態的一個是靜態的

進程的基本狀態和轉換:(以下七種狀態)

捕獲

一個時間片沒有執行完等待下一個時間片再次執行。

進程的優先級

系統優先級:數字越小優先級越高

0-139:(在centos4,5中) ? 各有140個運行隊列和過期隊列 ,每個運行隊列里又有優先級相同的進程在排隊,如果在一個時間片里1隊列里的進程未執行完 ,則備安排到過期隊列里,下一個時間到來,先運行1運行隊列里的程序,什么時候1運行隊列里的進程執行完畢后,過期1隊列里的程序又變成1運行隊列了,依次順序執行下去

0-98,99(CentOS6)

實時優先級:99-0 值最大優先級最高

進程內存

LRU:Least Recently Used?近期最少使用算法,釋放內存

進程訪問的時間順序來排列,最近執行的進程排到第一位原本的第一位被擠到第二位了依次類推 內存里的物理塊為8個。被擠到最后一個的進程在被擠將清除除內存塊里。

查看進程進程ps ? (常用的 ps? aux? )BSD類型的選項

? a? 包括所有終端中的進程

? x? 包括不鏈接終端的進程 (不在終端上顯示的 系統內部運行的進程)

? u? 顯示進程所有者的信息

f 選項顯示進程樹,相當于 –forest

? k|–sort 屬性 對屬性排序,屬性前加 – 表示倒序

? o 屬性… 選項顯示定制的信息 pid、cmd、%cpu、%mem? (o和其他選項組和是必須要和他后面的參數緊挨著不然命令有錯例如:ox pid,cmd,%cpu 則不行 auxo pid ,cmd ,%cpu 則可以)

UNIX類型的選項

-C cmdlist 查找命令的進程列表例如;ps -C bash (查找名字為bash 的進程列表還可以在C后面跟上腳本,來查看腳本的各種信息如:ps -C f1.sh -C f2.sh o pid,%mem,%cpu )

-L 顯示線程 ?

-e: 顯示所有進程,相當于-A ?

-f: 顯示完整格式程序信息 ?

-F: 顯示更完整格式的進程信息 ?

-H: 以進程層級格式顯示進程相關信息 ?

-u userlist 指定有效的用戶ID或名稱 ?

-U userlist 指定真正的用戶ID或名稱 ?

-g gid或groupname 指定有效的gid或組名稱 ?

-G gid或groupname 指定真正的gid或組名稱 ?

-p pid 顯示指pid的進程 ?

–ppid pid 顯示屬于pid的子進程 ?

-M 顯示SELinux信息,相當于Z

查找占用最多內存和CPU的進程:(centos6上不支持排序

ps axo pid,ppid,cmd,%mem,%cpu –sort=-%mem | head? (占內存最多-代表倒序)

ps axo pid,ppid,cmd,%mem,%cpu –sort=-%cpu | head ?(占cpu最多 —代表倒序由大到?。?/p>

其中 –sort / k 選項某某 可以單獨使用例如 ps aux? –sort? -%mem

搜索進程

按預定義的模式:pgrep ?(支持正則表達式來搜索某個進程pgrep -a “vim”)

pgrep [options] pattern

-u uid: effective user,生效者

-U uid: real user,真正發起運行命令者

-t terminal: 與指定終端相關的進程

-l: 顯示進程名

-a: 顯示完整格式的進程名

-P pid: 顯示指定進程的子進程

pidof + 進程名稱 :可顯示某個進程的進程id 例如:pidof vim

ps -fp 1234? :直顯示某個進程的信息 如1234進程

系統工具

uptime:

顯示當前時間,系統已啟動的總時間、當前上線人數,系統平均負載(1、5、10分 鐘的平均負載,一般不會超過1) ?

系統平均負載: 指在特定時間間隔內運行隊列中的平均進程數 ?

通常每個CPU內核的當前活動進程數不大于3,那么系統的性能良好。

如果每 個CPU內核的任務數大于5,那么此主機的性能有嚴重問題 ?

如果linux主機是1個雙核CPU,當Load Average 為6的時候說明機器已經被 充分使用

進程優先級

進程默認啟動時的nice值為0,優先級為120

nice的優先級數值為-20-19之間

查看nice 的優先級

ps axo pid,comm,ni

調整nice 的優先級

renice -n ? -20 ? 進程pid號

進程管理工具? (動態查看)

top:有許多內置命令:

排序:

P:以占據的CPU百分比,%CPU? (從大到小來查看)

M:占據內存百分比,%MEM ? ? (從大到小來查看)

T:累積占據CPU時長,TIME+

首部信息顯示:

uptime信息:l命令

tasks及cpu信息:t命令

cpu分別顯示:1 (數字)

memory信息:m命令

退出命令:q

修改刷新時間間隔:s

終止指定進程:k (默認殺掉占用cpu最大的進程?)

保存文件:W ? (把當前的信息瞬間保存到家目錄下 ,是個隱藏文件 .toprc)

top欄位信息簡介

us:用戶空間

sy:內核空間

ni:調整nice時間

id:空閑cpu

wa:等待IO時間

hi:硬中斷

si:軟中斷(模式切換)

st:虛擬機偷走的時間

top工具的選項:

-d #: 指定刷新時間間隔,默認為3秒

-b: 全部顯示所有進程

-n #: 刷新多少次后退出

htop命令:EPEL源 (需要安裝

選項:

-d #: 指定延遲時間;

-u UserName: 僅顯示指定用戶的進程

-s COLUME: 以指定字段進行排序

子命令:(在htop界面里使用的)

s: 跟蹤選定進程的系統調用

l: 顯示選定進程打開的文件列表

a:將選定的進程綁定至某指定CPU核心

t: 顯示進程樹

查看內存空間:

free [OPTION]

-b 以字節為單位

-m 以MB為單位

-g 以GB為單位

-h 易讀格式

-o 不顯示-/+buffers/cache行

-t 顯示RAM + swap的總和

-s n 刷新間隔為n秒 (free -s 2 查看內存使用情況每2s刷新查看一次)

-c n 刷新n次后即退出

vmstat命令:查看虛擬內存信息

vmstat 2 5? (2s執行一次,執行5次后退出)

iostat:統計CPU和設備IO信息

iostat 1 10? (1s查看一次執行10次后退出)

pmap命令:進程對應的內存映射

pmap -x 234? : 顯示進程234詳細的信息對應的內存映射。

系統監控工具

glances命令:EPEL源

常用選項:

-b: 以Byte為單位顯示網卡數據速率

-d: 關閉磁盤I/O模塊

-f /path/to/somefile: 設定輸入文件位置

-o {HTML|CSV}:輸出格式

-m: 禁用mount模塊

-n: 禁用網絡模塊

-t #: 延遲時間間隔

-1:每個CPU的相關數據單獨顯示

實現遠程監控:

在一臺作為服務器的機器上開啟glances

服務器模式: glances -s -B IPADDR ? (IPADDR: 指明監聽的本機哪個地址的IP號)

在另一臺客戶機開啟監視模式

客戶端模式: glances -c IPADDR ? ?? (IPADDR:要連入的服務器端開啟監視的地址IP)

系統監控工具

dstat命令:系統資源統計,代替vmstat,iostat? (動態更新默認1s一次)

-c: 顯示cpu相關信息

-d: 顯示disk相關信息

-g:顯示page相關統計數據

-m: 顯示memory相關統計數據

-n: 顯示network相關統計數據

-p: 顯示process相關統計數據

-r: 顯示io請求相關的統計數據

-s: 顯示swapped相關的統計數據

dstat –top-cpu:

–top-cpu:顯示最占用CPU的進程

–top-io: 顯示最占用io的進程 ?

–top-mem: 顯示最占用內存的進程 ?

–top-latency: 顯示延遲最大的進程

進程管理工具 kill 命令? kill -1 4556 ? (可以按選項編號來代替選項命令 進程只能是進程ID號可加多個進程ID)

1) SIGHUP: 無須關閉進程而讓其重讀配置文件

2) SIGINT: 中止正在運行的進程;相當于Ctrl+c

3) SIGQUIT:相當于ctrl+\? (退出)

9) SIGKILL: 強制殺死正在運行的進程

15) SIGTERM:終止正在運行的進程? (正常退出此進程)

18) SIGCONT:繼續運行

19) SIGSTOP:后臺休眠

按名稱來殺進程:killall? sleep ? (把同樣名字的進程都給殺掉)

按模式來殺掉進程:pkill ? (正則表達式模糊搜索)

-u uid: effective user,生效者

-U uid: real user,真正發起運行命令者

-t terminal: 與指定終端相關的進程

-l: 顯示進程名(pgrep可用)

-a: 顯示完整格式的進程名(pgrep可用)

-P pid: 顯示指定進程的子進程

作業管理

讓作業運行于后臺

(1) 運行中的作業: Ctrl+z? (進程是放到后臺了但進程停止了)

(2) 尚未啟動的作業:? 命令后面跟 &

后臺執行的進程,無法用ctrl+c關掉 可以使用jobs查看后臺執行的列表的作業編號

用命令fg +作業編號 將它變為前臺終端執行,然后關掉。

或者用kill %+作業編號

fg? +作業編號? :將后臺的進程變為前臺來執行

bg +作業編號 ? :將后太臺停止的進程開始在后臺繼續運行

進程運行的三種模式及相互切換

捕獲

前臺(未運行的程序)—–>后臺運行:命令后+&

前臺(已運行的程序)—–>后臺休眠:ctrl +z

后臺休眠和后臺運行——->前臺 :fg jobs的 進程編號

后臺休眠——–>后臺運行 :bj jobs的 進程編號

后臺運行——->后臺休眠: kill -19? 進程

后臺休眠和后臺運行——–>結束: kill % jobs的進程編號

后臺作業雖然被送往后臺運行,但其依然與終端相關;退出終端,將關閉后臺作業。如果希望 送往后臺后,剝離與終端的關系 ? nohup ping 172.20.0.1 &? (后臺運行剝離終端在服務器上繼續執行 ,即使終端斷網或關機也也可以繼續執行)?

或者用screen會話也能實現:screen ping 172.20.0.1 &

在另一臺終端:screen -r 可查看執行

并行運行多個進程:(提高效率)

方法1 :

寫入一個腳本中:

vim all.sh

進程1&

進程2&

進程3&

然后運行腳本all.sh

方法2:

(進程1&);(進程2&);(進程3&)

方法3 :

{ ? 進程1& ? 進程2& ?? 進程3&? }

任務計劃

Linux任務計劃、周期性任務執行

at ? (未來的某時間點執行一次性的任務 )

at 18:30? (寫入磁盤里的)? 或者 at? now? +15minutes? (在未來的15分鐘執行)

02pm + 3 days? (三天之后的下午2點執行)

ctrl +d 結束保存任務計劃

at的計劃任務存放在 /var/spool/at 目錄下

-l:? 查看計劃任務列表

-d: 刪除任務列表中的計劃任務(加任務號)或者刪除/var/spool/at下的文件也可以

-c: 查看具體作業任務

-f /path/from/somefile:從指定的文件中讀取任務

創建任務時添加-m:當任務被完成之后,強制給用戶發送一個空郵件,即使沒有標準輸出(at -m 18:00)

注意:作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關用戶 如果寫腳本,將這些標準輸出和錯誤重定向到/dev/null里以防止有大量的垃圾郵件占用磁盤空間

寫入腳本里的計劃任務可以用多行重定向來輸入:
at 18:00? <<EOF

reboot

ls

EOF

/etc/at.{allow,deny}控制用戶是否能執行at任務

用戶白名單:/etc/at.allow 默認不存在,只有該文件中的用戶才能創建at計劃任務

用戶黑名單:/etc/at.deny 默認存在,拒絕該文件中用戶 創建at計劃任務,(默認黑名單里的用戶為空)

如果連個文件都存在,則只時白名單里的用戶才能執行,不在這兩個名單里的用戶也不可 創建計劃任務

如果兩個文件都不存在則只有root用戶才能 創建計劃任務

用戶如在在兩個文件里,也是可以創建計劃任務的,白名單的優先級較高。

cron (周期性運行某任務)計劃周期性執行的任務提交給crond,到指定時間會自動運行

查看crond 是否處于運行狀態:

CentOS 7: systemctl status crond

CentOS 6: service crond status

如果沒有啟動需要手工的啟動起來:

centos6: service start crond

centos7: systemctl start crond

下此開機自動啟動

centos7 : systemctl enable crond

新建計劃任務

vim /etc/crontab

捕獲

格式為:分鐘 ;小時;天;月;周(0-6)? 以下案例:

10 21 *? * ? * ? echo “hello” ? : 代表每天21:10執行此計劃任務

0 */3 * * * ?? echo “hello” ?? : 代表每3個小時執行

*/20 *? *? *? *? echo “hello” :? 代表每20分鐘執行 (如果被60除不盡則不能這樣用但可用sleep腳本代替例如:cmd0? sleep X ? cmd0 ? sleepX ? 其中X代表任意時間 sleep 默認為秒)

sleep: ? ?? m: 分 h: 小時 d: 天 ? sleep ?? 1m :為一分鐘(1m必須連著寫且不能顛倒)
* ? * ? 10-20 ? * ? *? : 代表每個月的10-20號執行

* ? * ? 10,20 ? * ?? * ?? : 代表每個月的10和20號執行

* ? * ?? 10,20? * ?? 3? :? 他們倆是或的關系

如果有標準輸出則需要重定向到/dev/null里防止發過多的垃圾郵件。

此文件只能是root用戶去創建和修改此文件普通用戶無法修改和創建,但可以通過下面的命令來實現 。

每個用戶都有專用的cron任務文件: /var/spool/cron/

crontab -e :編輯任務

-l: 列出所有任務

-r: 移除所有任務

-i:同-r一同使用,以交互式模式移除指定任務

-u user: 僅root可運行,指定用戶管理cron任務 (crontab -e -u lv 編輯其他用戶的計劃任務)

控制用戶執行計劃任務: /etc/cron.{allow,deny}

當機器因為修改計劃任務開機就重啟時 無法進入到界面

cetnos7上操作;

一種是進入救援模式:另一種不用進入救援模式也可以

重啟后按 e 鍵 然后再

linux16 加 rd.break

再按ctrl +x 進入

首先用戶沒有權限,所以要先加權限

mount -o remount? rw /sysroot

再進去修改文件即可。

centos6 上的操作:關機重啟

 

捕獲的

進入此界面按任意鍵進入到下面模式

捕獲都非常

再按a 鍵進入并再后面加 1? 回車即可修改文件保存 再按 init 5 進入到圖形界面即可。

練習
?1、每周的工作日1:30,將/etc備份至/backup目錄中,保存的文件名稱格式 為“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的時間

? mkdir -p /backup ?

? 30? 13? *? *? 1-5? root ? tar Jcvf? /backup/etcbak-`date +F\%-H\%`.tar.xz &>/dev/null

也可將上述命令寫入腳本,執行腳本即可(%號可能轉義不成功,則必須寫入腳本里執行)

2、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至 /tmp/meminfo.txt文件中

0? */2? *? *? * ?grep -e “^S” -e “^M” /proc/meminfo >>/tmp/meminfo.txt

?3、工作日時間,每10分鐘執行一次磁盤空間檢查,一旦發現任何分區利用率高 于80%,就執行wall警報

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97419

(0)
無所謂無所謂
上一篇 2018-05-03
下一篇 2018-05-03

相關推薦

欧美性久久久久