Linux進程與作業
操作系統的組成部分:硬件,kernel,lib, 系統調用-->調用kernel lib調用--> 庫調用,kernel調用 運行用戶代碼-->用戶模式-->用戶空間; 運行kernel-->內核模式-->內核空間; 內核的功用:進程管理,文件系統,網絡功能,內存管理,驅動程序,安全功能 CPU寄存器至保存當前狀態的數據:------>找一個地方保存數據-->恢復數據: 進程-->Process:運行中的程序的一個副本; 同一個程序可以被創建并行的多個進程; 進程存在生命周期;-->進程是一個活體,有生命周期; task struct:任務結構體:內核存儲進程信息的固定格式; 多個任務的task struct組件的鏈表;task list 進程創建: init是無法像內核調用特權指令,但是可以進行創建進程; 進程是由父進程創建:父子關系 fork(請求創建進程的調用接口;) clone(克隆自己的數據給子進程;) 任何進程銷毀都是其父進程進行銷毀; 進程優先級: 0-139: 0-99:實時優先級;-->數字越大優先級越高; 100-139:靜態優先級;-->數字越小優先級越高; NICE值: -20,19程序的優雅值: Big O O(1),O(logn),O(n),O(n^2),O(2^n); 每個程序有2個隊列:運行隊列,過期隊列; 程序運行優先級查看運行隊列: 進程的task struct: 進程內存: 內核完成資源分配: 同一個命令,不同數據使用的內存也是不一樣的; 將內存分割成一個個4k的頁框存儲頁面數據; page frame:頁框,存儲頁面數據; 每個進程的所占的內存有page frame組成;偽裝成連續空間給進程; 以32位系統位列:每個進程運行時內核告訴進程有3G內存可用;-->虛擬內存-->線性地址空間; 真正分配的內存空間:物理地址空間:-->與先行地址空間是離散對應的; 內存為每個進程都保存了task stauct; MMU:Memory Management Unit內存管理單元; 缺頁異常:訪問數據,發現物理空間數據不在了; 常駐內存集:不能被交換 虛擬內存集:可以進行交換-->swap上 IPC:Inter Process Communication 進程與進程無法通信: 如需要通信:同一主機上; signal shm:shared memory 共享內存空間; semerphor 不同主機上: rpc:remote procecure call:遠程過程調用; socket:基于套接通信; Linux內核:搶占式多任務:
進程類型:
守護進程:daemon;與終端無關,在系統引導過程中啟動的進程; 前臺進程:用戶終端啟動進程:與終端相關; 注意:也可把在前臺啟動進程送往后臺,變為以守護模式運行; 進程狀態: 運行態:running 就緒態或睡眠態:ready 睡眠態: 可中斷睡眠:任意時間都可喚醒:interruptable 不可中斷睡眠:uninterruptable 進程:指令+數據 一次IO是由分2段進行:磁盤加載內核內存,內核內存復制進程內存; 第二段:IO調用過程。 第一段: 停止態:暫停于內存中,但不會被調度,除非手動啟動; 僵死態:zombie init:是負責收拾沒有父進程的子進程; 進程的基本分類: CPU-Bound:CPU密集進程-->消耗更多的CPU 非交互式: IO-Bound:IO密集進程--> 交互式:
Linux進程查看及管理工具:
pstree工具: ** pstree - display a tree of processes** **[root@wanghongkai ~]# pstree init─┬─NetworkManager─┬─dhclient │ └─{NetworkManager} ├─abrtd ├─acpid ├─atd ├─auditd───{auditd} ├─automount───4*[{automount}] ├─bonobo-activati───{bonobo-activat} ├─certmonger ps:process state進程狀態查看工具: ps - report a snapshot of the current processes. Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中; 支持2中風格:-或空 常用組合:aux u:以用戶為中心組織進程狀態信息顯示: a:所有與終端相關的進程; x:與終端無關的進程: 線程是進程的子單位 [root@wanghongkai ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 19352 1452 ? Ss 04:26 0:02 /sbin/init root 2 0.0 0.0 0 0 ? S 04:26 0:00 [kthreadd] USER:進程屬主; PID:進程ID; cup:cpu百分比; vsz:虛擬內存或線性內存集: RSS:常駐內存集:不能放在交換分區的; TTY:通過那個終端啟動: COMMAND:那個命令使用的: STAT:進程狀態: R:runing S:interruptable sleeping D:uninterruptable sleeping T:stopped Z:zombie +:前臺進程 l:多線程進程 N:低優先級進程 <:高優先級進程 s:session leader START:啟動時間: 常用組個:-e -e:顯示所有進程 -f:顯示完整的進程信息 常用組合:-eFH -F:顯示完整格式的進程信息 -H:以進程層級格式顯示進程相關信息 [root@wanghongkai ~]# ps -F UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 20570 20566 0 27154 2044 0 19:41 pts/1 00:00:00 -bash root 20744 20570 0 27560 1136 0 20:07 pts/1 00:00:00 ps -F [root@wanghongkai ~]# ps -f UID PID PPID C STIME TTY TIME CMD root 20570 20566 0 19:41 pts/1 00:00:00 -bash root 20746 20570 0 20:08 pts/1 00:00:00 ps -f 常用組合:-eo ,axo 自定義想查看進程; ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm ps -eopid,tt,user,fname,tmout,f,wchan ni:nice值 pri:priority,優先級 psr:processor,CPU reprio:實時優先級 pgrep,pkill:進程顯示的過濾: pgrep [options] pattern pkill [options] pattern -->殺死進程; -U:實際用戶 -u:有效用戶 -t:與指定終端相關的進程 -l:顯示進程名 -a:顯示完整格式的進程名 -P pid:顯示其父進程為此處指定的進程的進程列表 pidof:根據進程名獲取其PID: top:top:默認是根據CPU排序時時查看工具: top - 20:24:31 up 15:58, 3 users, load average: 0.00, 0.00, 0.00 Tasks: 147 total, 1 running, 146 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1020080k total, 934040k used, 86040k free, 89512k buffers Swap: 2097148k total, 8k used, 2097140k free, 512508k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19352 1452 1132 S 0.0 0.1 0:02.96 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 [root@wanghongkai ~]# uptime 20:27:50 up 16:01, 3 users, load average: 0.00, 0.00, 0.00 **常用選項** 排序: P:以占據的CPU百分比: M:整體上占據內存百分比: T:累積占據CPU時長: 首部信息顯示: uptime信息:l命令 tasks及CPU信息:t命令 CPU分別顯示:1 memory信息:m命令 q:退出 s:修改刷新時間間隔 k:殺出某個進程 選項: -d:指定刷新時間間隔,默認是3秒 -b:批次顯示,后跟-n #顯示多少批次 htop:在epel源當中的提供:這里我用的是阿里云:我講阿里云的eple源的鏡像加載到我的yum源中: [epel] name=epel-6.0 baseurl=http://mirrors.aliyun.com/epel/6/x86_64/ gpgcheck=0 enabled=1 選項: -d #: 指定延遲時間; -u UserName: 僅顯示指定用戶的進程; -s COLOMN: 以指定字段進行排序; 命令: s: 跟蹤選定進程的系統調用; l: 顯示選定進程打開的文件列表; a:將選定的進程綁定至某指定CPU核心; t: 顯示進程樹
原創文章,作者:wostop,如若轉載,請注明出處:http://www.www58058.com/27331
總結的很好,如果能對命令的顯示結果有一些詳解的解釋就更好了