天天看點

running 4 Processes Managing

關于 程序的解釋:

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

繼續閱讀