關于 程序的解釋:
processes 可以解釋為 一段記憶體空間中正在運作的一個或者多個線程
程序可以看做是使用者的代理 代理使用者與核心及系統元件互動 完成使用者交與的任務
linux裡一切皆檔案 當然 程序也不例外
目前系統正在運作的程序相關檔案:/etc/proc/*
系統根據程序号PID識别每個程序 PID (1~32767)
使用者每發起一個程序 系統就配置設定一個PID 用來辨別此程序
PID1為init程序 程序号永遠為1 它是啟動linux系統時啟動的第一個程序 然後 任何程序都作為它的子程序從它啟動 進而就可以啟動更多子子程序。。
信号:程序之間彼此通信的資訊
檢視系統程序:
重要指令:
#ps aux
a 包括所有終端的所有程序
u 顯示每個程序的使用者資訊
x 包括不屬于某個終端的程序
f 列出程序的父子關系
o 按使用者指定格式顯示資訊
例如 #ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 2072 616 ? Ss 02:18 0:01 init [5]
root 2 0.0 0.0 0 0 ? S< 02:18 0:00 [migration/0]
root 3 0.0 0.0 0 0 ? SN 02:18 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S< 02:18 0:00 [watchdog/0]
root 5 0.0 0.0 0 0 ? S< 02:18 0:00 [migration/1]
root 6 0.0 0.0 0 0 ? SN 02:18 0:00 [ksoftirqd/1]
root 7 0.0 0.0 0 0 ? S< 02:18 0:00 [watchdog/1]
root 8 0.0 0.0 0 0 ? S< 02:18 0:00 [events/0]
root 9 0.0 0.0 0 0 ? S< 02:18 0:00 [events/1]
root 10 0.0 0.0 0 0 ? S< 02:18 0:00 [khelper]
root 11 0.0 0.0 0 0 ? S< 02:18 0:00 [kthread]
root 15 0.0 0.0 0 0 ? S< 02:18 0:00 [kblockd/0]
root 16 0.0 0.0 0 0 ? S< 02:18 0:00 [kblockd/1]
root 17 0.0 0.0 0 0 ? S< 02:18 0:00 [kacpid]
root 78 0.0 0.0 0 0 ? S< 02:18 0:00 [cqueue/0]
root 79 0.0 0.0 0 0 ? S< 02:18 0:00 [cqueue/1]
root 82 0.0 0.0 0 0 ? S< 02:18 0:00 [khubd]
root 84 0.0 0.0 0 0 ? S< 02:18 0:00 [kseriod]
解釋:
USER:程序所屬使用者
PID:程序号
%cpu:cpu占用率
%mem:ram占用率k
vsz:vram占用率k
rss:占用非虛拟記憶體大小k
tty:相關聯的終端 ?表示系統守護程序 與終端沒有附屬關系
stat:程序狀态 S可中斷的睡眠 N低優先級 <高優先級
start: 程序發起時間
time:從發起程序到現在總共使用過的cpu運作時間
command:屬于哪個指令發起的程序
例如:#ps axo pid,%cpu,comm
PID %CPU COMMAND
1 0.0 init
2 0.0 migration/0
3 0.0 ksoftirqd/0
4 0.0 watchdog/0
5 0.0 migration/1
6 0.0 ksoftirqd/1
7 0.0 watchdog/1
8 0.0 events/0
9 0.0 events/1
10 0.0 khelper
11 0.0 kthread
15 0.0 kblockd/0
16 0.0 kblockd/1
17 0.0 kacpid
78 0.0 cqueue/0
79 0.0 cqueue/1
82 0.0 khubd
84 0.0 kseriod
151 0.0 pdflush
……………………
找到某個程序的方法
#ps aux |grep PID 或者程序名
也可以
#ps axo property1,property2,…|grep ttys0
檢視一個程序的pid
#pidof bash 可以看到程序名為bash的程序号
比對模式:
#pgrep –U root
顯示root的所有程序,也可以附加參數-v取反 即root之外的所有程序
#pgrep –G student
-L 顯示所有資訊
#ps aux |grep X 選出Xwindow 服務相關程序
pgrep的比對模式支援正規表達式
如:#ps axo pid,command |grep ssh
顯示ssh相關程序的pid 和發起指令
系統信号:
kill指令:可以+PID kill掉指定程序 有多種kill方式用kill –15 PID
signal 15 正常終止程序 允許該程序做完收尾工作 自動結束運作 該選項為預設值
signal 9 暴力終止 或者說強行終止 直接殺死程序 不容許該程序再多做一點
signal 1 reload 配置檔案
signal 2 打斷程式 例如ctrl+c
signal 13 broken pipe 破壞程序之間通信的管道以終止程序
30,10,16
30,12,17都可以自定義其操作和含義
其餘可以man 7 signal
可以kill –l 檢視
killall +程序名 可以kill掉基于該指令的所有程序
如果要kill一部分 就加上-i參數 互動式kill
killall –u +使用者名 kill掉某個使用者的所有程序
killall比對程序時 同樣支援正規表達式
實時檢視系統程序資訊:
#top指令
#ps –o comm,nice 更改程序優先級
nice值 –20 -- +19 優先級越小越高
如果程序未啟動 #nice –1 –p PID 則可以指定nice值
如果程序已經啟動則#renice -1|+1 –p PID 可以+n或者-n 不超過nice範圍即可
#nice –n 5 command 啟動時指定優先級
#top
top - 04:28:41 up 2:09, 5 users, load average: 0.00, 0.00, 0.00
Tasks: 129 total, 1 running, 128 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 2.2%sy, 0.5%ni, 96.4%id, 0.6%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 385256k total, 348888k used, 36368k free, 33316k buffers
Swap: 1052248k total, 0k used, 1052248k free, 191092k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 15 0 2072 616 528 S 0.0 0.2 0:01.21 init
2 root RT -5 0 0 0 S 0.0 0.0 0:00.83 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.49 ksoftirqd/0
4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
5 root RT -5 0 0 0 S 0.0 0.0 0:00.30 migration/1
6 root 34 19 0 0 0 S 0.0 0.0 0:00.17 ksoftirqd/1
7 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/1
8 root 10 -5 0 0 0 S 0.0 0.0 0:00.18 events/0
9 root 10 -5 0 0 0 S 0.0 0.0 0:00.01 events/1
10 root 10 -5 0 0 0 S 0.0 0.0 0:00.02 khelper
11 root 10 -5 0 0 0 S 0.0 0.0 0:00.01 kthread
15 root 10 -5 0 0 0 S 0.0 0.0 0:00.04 kblockd/0
16 root 16 -5 0 0 0 S 0.0 0.0 0:00.03 kblockd/1
17 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid
78 root 13 -5 0 0 0 S 0.0 0.0 0:00.00 cqueue/0
79 root 14 -5 0 0 0 S 0.0 0.0 0:00.00 cqueue/1
82 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khubd
84 root 10 -5 0 0 0 S 0.0 0.0 0:00.02 kseriod
批處理模式 重新整理一次翻屏一次
#top –b
-n 2 指定重新整理2次
-d 1 指定重新整理間隔為1s
系統作業:
#jobs
檢視目前和背景的作業
#fg %n 将作業号n的程序調到前台運作
#bg %n 讓作業号n的程序再背景繼續運作
#jobs –l 檢視程序号
-r running的作業
-s stopped的作業
#kill %n kill掉程序号為n的作業
指定計劃任務:
at
#at now + 5min 再過5分鐘運作
#at 16:30 (即下一個16:30)
之後可以寫 指令
一行一條
寫完之後ctrl +d 送出
也可以把指令放到一個檔案中 at能夠讀取這個檔案中的指令 逐條執行
#at –f /root/a.txt 04:00
做完的作業 用mail檢視 預設作業結果都會發到發起作業的使用者的郵箱
#at –d 3 删除第三個作業
#at =batch 當系統負載較低時自動運作作業
crontab
需要的軟體包和服務
vixie-cron.rpm
service crond start
#crontab –l 列出作業清單
-r清空作業清單
#crontab –u redhat –e 給别人寫任務計劃
-l –u redhat 檢視别人的任務計劃
編輯crontab任務清單
#crontab –e 即可
min hour day month week-day command
0-59 0-23 1-31 1-12 0-7 echo“xxxxxxx”
逐行寫計劃
如果那個參數不用或者循環用 則置為*
腳本中捕獲系統信号:
trap
如#trap “echo ‘xxxxxxxxx’&&exit 3”INT
即 捕獲到INT信号時 就echo xxxxxx這句話 并且退出shell 傳回狀态碼 3
具體信号種類 可以kill –l 檢視
可以将trap應用到 要捕獲使用者鍵盤輸入值 而執行某種動作的某個script
執行個體(1):
監測指定網卡的ip以及子網路遮罩是否正常 如果不正常則重新開機service 每隔10s檢視一次 如果捕獲使用者輸入ctrl+z或者ctrl+d則停止運作并傳回狀态碼2 echo 出you stopped ip test
#!/bin/bash
ETH='eth0'
trap "echo 'You stopped ip test...'&&exit 2" SIGSTOP SIGINT
testip() {
while true;do
[ `ifconfig $ETH|grep "inet addr"|cut -d' ' -f12,16|grep -E -o "([0-9]{1,3}\.){
3}[0-9]{1,3}"|wc -l` -ne 2 ]&&service network restart
sleep 10
done
}
while getopts "i:" SWITCH;do
case $SWITCH in
i) ETH=$OPTARG;testip;;
*) echo "Usage: -i value";;
esac
done