1、可執行程式代碼(Unix稱之為text section)。
通常進程還包括其他資源,如開啟的檔案、掛起的訊號、核心內部的資料、處理器狀態、地址空間及一個和多個執行線程、當然還包括用來存放全域變數的資料區段等,實際上,進程就是正在執行的程式碼的活標本。
2、進程存放是以鏈表的形式存放的,單個資料結構是一個task_struct的結構。(./linux/include/linux/sched.h。)。
3、/proc/sys/kernel/pid_max存放進程的最大數。
4、進程分類
進程一般分為互動進程、批處理進程和守護進程三類。
/etc/init.d/httpd 就是httpd伺服器的精靈,當把它的運行層級設定為3和5時,當系統啟動時,它會跟著啟動。
chkconfig --level 35 httpd on
5、進程的屬性;
① 進程ID(PID):是唯一的數值,用來區分進程;
② 父進程和父進程的ID(PPID);
③ 啟動進程的使用者ID(UID)和所歸屬的組(GID);
④ 進程狀態:狀態分為運行R、休眠S、殭屍Z;
⑤ 進程執行的優先順序;
⑥ 進程所串連的終端名;
⑦ 進程資源佔用:比如佔用資源大小(記憶體、CPU佔用量);
6、通過ps、kill、pgrep等管理進程
1)ps
查看進程
常用 ps -aux
2)pgrep 通過程式名查看進程是否運行
3)kill
資料庫伺服器的父進程不能用這些工具殺死,因為這些工具在強行終止資料庫伺服器時,會讓資料庫產生更多的檔案片段,當片段達到一定程度的時候,資料庫就有崩潰的危險。比如mysql伺服器最好是按其正常的程式關閉,而不是用pkill mysqld 或killall mysqld 這樣危險的動作;當然對於佔用資源過多的資料庫子進程,我們應該用kill 來殺掉。
kill [訊號代碼] 進程ID
代碼常用-9,強行終止
killall 正在啟動並執行程式名 //kill processes by name
xkill 是在案頭用的殺死圖形介面的程式。如firefox出現崩潰不能退出時,運行xkill,當xkill運行時出來和個人腦骨的表徵圖,移到firefox表徵圖上點一下。如果想終止xkill,就按右鍵取消。
7、其他命令
每個作業都是當前bash的一個子程式,彼此間是有關聯的。
ctrl+[z]將“當前”作業放到後台“暫停”
fg將後台作業拿到前台處理
bg將前台作業拿到後台運行
&直接將命令放到後台“執行”
jobs觀察作業狀態
8、fork調用建立一個子進程,而exec會用新程式代替當前進程上下文。
TASK_RUNNING 表示進程正在運行,或是排在運行隊列中正要運行;TASK_INTERRUPTIBLE 表示進程正在休眠、TASK_UNINTERRUPTIBLE 表示進程正在休眠但不能叫醒;TASK_STOPPED 表示進程停止等。
參考
【1】 非常不錯的個人網站
http://fendou.org/2009/08/02/linux-process-note/
【2】 在這裡瞭解了下個人資訊平台展示工具,wordpress
http://zh-cn.forums.wordpress.org/
【3】 http://www.linuxidc.com/Linux/2011-09/43179.htm
【4】 Linux 進程管理剖析,對fork,exit的執行機理進行了分析
http://www.ibm.com/developerworks/cn/linux/l-linux-process-management/
【5】 對原始碼進行剖析
http://blog.chinaunix.net/space.php?uid=20543183&do=blog&cuid=527393