互聯(lián)網(wǎng)與安全 2017-07-31 16:35:21 進(jìn)程是加載到內(nèi)存中的指令集,進(jìn)程有進(jìn)程 ID 加以標(biāo)示 程序與進(jìn)程1)進(jìn)程的定義 進(jìn)程”是操作系統(tǒng)的最基本、最重要的概念之一。但迄今為止對這一概念還沒有一個(gè)確切的統(tǒng)一的描述。下面給出幾種對進(jìn)程的定義描述。進(jìn)程是程序的一次執(zhí)行。進(jìn)程是可以并行執(zhí)行的計(jì)算。進(jìn)程是一個(gè)程序與其使用的數(shù)據(jù)在處理機(jī)上順序執(zhí)行時(shí)發(fā)生的活動(dòng)。進(jìn)程是程序在一個(gè)數(shù)據(jù)集合上的運(yùn)行過程。它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。 2)進(jìn)程的特征 動(dòng)態(tài)性:是程序的一次執(zhí)行;并發(fā)性:進(jìn)程是可以并發(fā)執(zhí)行;獨(dú)立性:是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位;異步性:進(jìn)程間的相互制約,使進(jìn)程執(zhí)行具有間隙;結(jié)構(gòu)性:進(jìn)程是具有結(jié)構(gòu)的。 3)進(jìn)程與程序的主要區(qū)別: (1)程序是永存的;進(jìn)程是暫時(shí)的,是程序在數(shù)據(jù)集上的一次執(zhí)行,有創(chuàng)建有撤銷,存在是暫時(shí)的; (2)程序是靜態(tài)的觀念,進(jìn)程是動(dòng)態(tài)的觀念; (3)進(jìn)程具有并發(fā)性,而程序沒有; (4)進(jìn)程是競爭計(jì)算機(jī)資源的基本單位,程序不是。 (5)進(jìn)程和程序不是一一對應(yīng)的: 一個(gè)程序可對應(yīng)多個(gè)進(jìn)程即多個(gè)進(jìn)程可執(zhí)行同一程序; 一個(gè)進(jìn)程可以執(zhí)行一個(gè)或幾個(gè)程序 進(jìn)程和線程1)定義 進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位. 線程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源. 2)關(guān)系 一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程;同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行. 相對進(jìn)程而言,線程是一個(gè)更加接近于執(zhí)行體的概念,它可以與同進(jìn)程中的其他線程共享數(shù)據(jù),但擁有自己的??臻g,擁有獨(dú)立的執(zhí)行序列。 3)區(qū)別 進(jìn)程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式。進(jìn)程有獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對其它進(jìn)程產(chǎn)生影響,而線程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時(shí),耗費(fèi)資源較大,效率要差一些。但對于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進(jìn)程。 (1)簡而言之,一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程. (2)線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。 (3)另外,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。 (4)線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。 (5)從邏輯角度來看,多線程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。但操作系統(tǒng)并沒有將多個(gè)線程看做多個(gè)獨(dú)立的應(yīng)用,來實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線程的重要區(qū)別。 4)優(yōu)缺點(diǎn) 線程和進(jìn)程在使用上各有優(yōu)缺點(diǎn):線程執(zhí)行開銷小,但不利于資源的管理和保護(hù);而進(jìn)程正相反。同時(shí),線程適合于在SMP機(jī)器上運(yùn)行,而進(jìn)程則可以跨機(jī)器遷移。 進(jìn)程狀態(tài)R運(yùn)行中的進(jìn)程 S睡眠 網(wǎng)絡(luò)類的守護(hù)進(jìn)程,可自動(dòng)睡眠 T掛起(暫停) D不可中斷進(jìn)程,一般是 I/O 申請失敗的進(jìn)程 Z僵尸進(jìn)程 停止執(zhí)行的進(jìn)程,未被從進(jìn)程列表中清楚 <高優(yōu)先級進(jìn)程 N低優(yōu)先級進(jìn)程 L某些頁被縮進(jìn)內(nèi)存(網(wǎng)絡(luò)時(shí)鐘服務(wù)) S父進(jìn)程 Ss睡眠中的父進(jìn)程 l多線程 +后臺(tái)進(jìn)程 進(jìn)程管理工具1 ps 查看當(dāng)前終端的活躍進(jìn)程 [root@localhost ~]#ps aux (a 顯示所有進(jìn)程 u 顯示進(jìn)程擁有者信息 x 顯示守護(hù)進(jìn)程) user 進(jìn)程的擁有者 pid進(jìn)程號 · USER 運(yùn)行此進(jìn)程的用戶名 · PID 該 process 的號碼。 · %CPU 該 process 使用掉的 CPU 資源百分比; · %MEM 該 process 所占用的物理內(nèi)存百分比; · VSZ 該 process 使用掉的虛擬內(nèi)存量 (Kbytes) · RSS 該 process 占用的固定的內(nèi)存量 (Kbytes) · TTY 該 process 是在那個(gè)終端機(jī)上面運(yùn)作,若與終端機(jī)無關(guān),則顯示 ?,另外,tty1-tty6 是本機(jī)上面的登入者程序,若為 pts/0 等等的,則表示為由網(wǎng)絡(luò)連接進(jìn)主機(jī)的程序。 · STAT 該程序目前的狀態(tài),Linux 進(jìn)程有 5 種基本狀態(tài): R (正在運(yùn)行或在運(yùn)行隊(duì)列中等待) ; S 該程序目前正在睡眠當(dāng)中 ,但可被某些訊號 (signal) 喚醒。 T 該程序目前暫停了 【例】 vim a.txt 按下: ctrl+z ctrl-c是發(fā)送 SIGINT 信號,終止一個(gè)進(jìn)程 ctrl-z 是發(fā)送 SIGSTOP 信號,掛起一個(gè)進(jìn)程。 Z 該程序應(yīng)該已經(jīng)終止,但是其父程序卻無法正常的終止他,造成 zombie (疆尸) 程 序的狀態(tài) D 不可中斷狀態(tài). < 高優(yōu)先級的 N 低優(yōu)先級的 s 包含子進(jìn)程 l 多線程 + 前臺(tái)程序 ·START 該 process 被觸發(fā)啟動(dòng)的時(shí)間; · TIME 該 process 實(shí)際使用 CPU 運(yùn)作的時(shí)間。 · COMMAND 該程序的實(shí)際指令 pstree 打印進(jìn)程的家譜[root@localhost ~]# pstree -p |more init(1)-+-abrt-dump-oops(2149) |-abrtd(2141) |-acpid(1857) |-anacron(4142) |-atd(2206) |-auditd(2440)---{auditd}(2441) |-automount(1932)-+-{automount}(1933) | |-{automount}(1934) 顯示目錄樹形結(jié)構(gòu) [root@localhost ~]#tree出錯(cuò),因?yàn)橄到y(tǒng)未安裝tree,我們安裝一下 [root@localhost ~]# mount /Dev/cdrom /mnt [root@localhost ~]#rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm [root@localhost ~]#tree /boot/ /boot/ ├── config-3.10.0-514.el7.x86_64 ├── efi │ └── EFI │ ├── BOOT │ │ ├── BOOTX64.EFI │ │ └── fallback.efi │ └── centos │ ├── BOOT.CSV │ ├── fonts │ │ └── unicode.pf2 │ ├── gcdx64.efi │ ├── grub.cfg │ ├── grubenv │ ├── grubx64.efi │ ├── MokManager.efi │ ├── shim-centos.efi │ └── shim.efi ├── grub │ └── splash.xpm.gz ├── grub2 │ ├── grubenv -> /boot/efi/EFI/centos/grubenv │ └── themes │ └── system ├── initramfs-0-rescue-d5c175b4421d4188ac7c786631009476.img ├──initramfs-3.10.0-514.el7.x86_64.img ├──initramfs-3.10.0-514.el7.x86_64kdump.img ├──initrd-plymouth.img ├──symvers-3.10.0-514.el7.x86_64.gz ├──System.map-3.10.0-514.el7.x86_64 ├──vmlinuz-0-rescue-d5c175b4421d4188ac7c786631009476 └──vmlinuz-3.10.0-514.el7.x86_64 9 directories, 22 files pgrep 按預(yù)定義模式查找[root@localhost ~]# pgrep -U root 搜索全部屬于 root 用戶的進(jìn)程,只打印進(jìn)程號 PID [root@localhost ~]# pgrep sshd 搜索 sshd 進(jìn)程 pidof 按確切的進(jìn)程名查找pidof vim 查看 yes 的 pid kill -9 `pidof vim`直接殺死 yes 進(jìn)程 擴(kuò)展:yes 命令:無限打印指定內(nèi)容 yes kklkl top 動(dòng)態(tài)查看進(jìn)程作用:統(tǒng)計(jì)信息區(qū)前五行是系統(tǒng)整體的統(tǒng)計(jì)信息。 動(dòng)態(tài)進(jìn)程圖 1.第一行是任務(wù)隊(duì)列信息 同 uptime 命令的執(zhí)行結(jié)果: [root@localhost ~]# uptime 13:22:30 up 8 min, 4 users, load average: 0.14, 0.38, 0.25 對上面的動(dòng)態(tài)進(jìn)程圖解釋一下,如下 14:16:02 當(dāng)前時(shí)間 up 57 min 系統(tǒng)運(yùn)行時(shí)間,格式為時(shí):分 5 users 當(dāng)前登錄用戶數(shù) load average: 0.00, 0.01, 0.05 系統(tǒng)負(fù)載,即任務(wù)隊(duì)列的平均長度。 三個(gè)數(shù)值分別為1 分鐘、5 分鐘、15 分鐘前到現(xiàn)在的平均值 一般來說,每個(gè) CPU 內(nèi)核當(dāng)前活動(dòng)進(jìn)程數(shù)不大于 3,則系統(tǒng)運(yùn)行表現(xiàn)良好!當(dāng)然這里說的是每個(gè) cpu 內(nèi)核,也就是如果你的主機(jī)是四核 cpu 的話,那么只要 uptime 最后輸出的一串字符數(shù)值小于 4*3=12 即表示系統(tǒng)負(fù)載不是很嚴(yán)重. 2.第二、三行為進(jìn)程和 CPU 的信息 Tasks: 154 total 進(jìn)程總數(shù) 1 running 正在運(yùn)行的進(jìn)程數(shù) 153 sleeping 睡眠的進(jìn)程數(shù) 0 stopped 停止的進(jìn)程數(shù) 0 zombie 僵尸進(jìn)程數(shù) Cpu(s):0.0% us系統(tǒng)用戶進(jìn)程使用 CPU 百分比。 不包括調(diào)高優(yōu)先級的進(jìn)程。 CPU%是由每個(gè)用律之和算出來 的。如果你是 4 核 CPU,核 1,CPU 使用率為 100%,核 2,CPU 使用率為 100%。 則會(huì)出會(huì) CPU 高于 100%的現(xiàn)象,最終為 200% 0.0% sy 內(nèi)核中的進(jìn)程占用 CPU 百分比 0.0% ni 用戶進(jìn)程空間內(nèi)改變過優(yōu)先級的進(jìn)程占用 CPU 百分比 0.0% id 空閑 CPU 百分比 3.第四五行為內(nèi)存信息。 Mem: 1883272 total 物理內(nèi)存總量 369496 used 使用的物理內(nèi)存總量 815180 free 空閑內(nèi)存總量 698596 buff 用作內(nèi)核緩存的內(nèi)存量。和 free –k 一個(gè)意思 Swap: 2097148 total 交換區(qū)總量 0k used 使用的交換區(qū)總量 2097148 free 空閑交換區(qū)總量 進(jìn)程信號1 sighup 重新讀取配置文件 9 sigkill 立即終止進(jìn)程 15sigterm 整潔終止 19 sigstop 暫停執(zhí)行 控制進(jìn)程1.按 pid kill -9 PID 2.按進(jìn)程名稱 killall -15 vim 3.查看后臺(tái)進(jìn)程情況 jobs [root@localhost ~]# firefox & [root@localhost ~]# jobs [1]+ Running firefox & fg:恢復(fù)后臺(tái)進(jìn)程到前臺(tái)并運(yùn)行 了解: ps -ef ps -aux 是用 BSD 的格式來顯示進(jìn)程。 ps -ef 是用標(biāo)準(zhǔn)的格式顯示進(jìn)程 進(jìn)程信息PID 進(jìn)程 id USER 進(jìn)程所有者的用戶名 NI 進(jìn)程優(yōu)先級。 nice 值。負(fù)值表示高優(yōu)先級,正值表示低優(yōu)先級 RES 實(shí)際使用內(nèi)存大小。 S 進(jìn)程狀態(tài)。 D=不可中斷的睡眠狀態(tài) R=運(yùn)行 S=睡眠 T=跟蹤/停止 Z=僵尸進(jìn)程 %CPU 上次更新到現(xiàn)在的 CPU 時(shí)間占用百分比 %MEM 進(jìn)程使用的物理內(nèi)存百分比 TIME+ 進(jìn)程使用的 CPU 時(shí)間總計(jì),單位 1/100 秒 COMMAND 命令名/命令行 1.top 快捷鍵 默認(rèn) 3s 刷新一次 空格 :立即刷新。 q 退出 M 按內(nèi)存排序 P 按 CPU 排序 <> 翻頁 補(bǔ)充 htop 比 top 更強(qiáng)大 安裝:要使用 epel 源 yum install htop 測試負(fù)載: dd if=/dev/zero of=/dev/null 2 控制(關(guān)閉)進(jìn)程 kill 給進(jìn)程發(fā)送信號(停止進(jìn)程) 常用信號: 1 HUP 重新加載配置文件。類似重啟。 2 INT 和 ctrl+c 一樣 一般用于通知前臺(tái)進(jìn)程組終止進(jìn)程 9 KILL 強(qiáng)行中斷 19 STOP 和 ctrl+z 一樣 語法:kill -9 pid [root@localhost ~]# ps -axu | grep top root 7678 1.0 0.1 15088 1292 pts/0 S+ 22:11 0:00 top root 7682 0.0 0.0 103300 848 pts/1 S+ 22:11 0:00 grep top [root@localhost ~]# kill -9 7678 killall 通過程序的名字,直接殺死所有進(jìn)程 [root@localhost ~]#killall httpd [root@localhost ~]# ps -axu | grep httpd 或者: [root@localhost ~]#pkill httpd 3 優(yōu)先級控制 nice 值 -20 ~ 19 越小優(yōu)先級越高 普通用戶 0-19 nice 作用:以什么優(yōu)先級運(yùn)行進(jìn)程 。默認(rèn)優(yōu)先級是 0 語法: nice -n 優(yōu)先級數(shù)字 擴(kuò)展: vim a.txt #出現(xiàn)以下情況 E325: ATTENTION Found a swap file by the name ".a.txt.swp" owned by: root dated: Tue Jan 27 22:19:53 2015 [root@localhost ~]# rm -rf .a.txt.swp 【例】 # nice -n -5 vim a.txt vim 進(jìn)程以-5 級別運(yùn)行 查看: ps -axu | grep a.txt [root@localhost ~]# ps -axu | grep b.txt Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ root 24318 0.0 0.2 143624 3280 pts/4 S+ 17:00 0:00 vim b.txt [root@localhost ~]# top -p 24318 PID USER PR S+ 17:00 0:00 vim b.txt 24318 NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 24219 root 15 -5 140m 3336 2200 S 0.0 0.3 0:00.08 vim renice #修改正在運(yùn)行的進(jìn)程的優(yōu)先級 # renice -n 5 PID 修改進(jìn)程優(yōu)先級 【例】 #renice -n 5 24318 [root@localhost ~]# top -p 24318 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 24219 root 15 5 140m 3336 2200 S 0.0 0.3 0:00.08 vim 4 前后臺(tái)進(jìn)程切換 jobs 列出所有后臺(tái)進(jìn)程 [root@localhost ~]#vim a.txt & [1] 9714 [root@localhost ~]# jobs [1]+ Stopped im a.txt [1] 后臺(tái)進(jìn)程序列號 fg 后臺(tái)程序改成前臺(tái) 用法: fg 后期進(jìn)程序列號 例: [root@localhost ~]#fg 1 5 free 查看系統(tǒng)內(nèi)存量 -m 按照 MB 顯示 [root@localhost ~]# free [root@localhost ~]# free total used free shared buff/cache available Mem: 1883272 395664 744196 24300 743412 1251388 Swap: 2097148 0 2097148 buffers #緩存從磁盤讀出的內(nèi)容 cached #緩存需要寫入磁盤的內(nèi)容 清空緩存: 頻繁的文件訪問會(huì)導(dǎo)致系統(tǒng)的 Cache 使用量大增 釋放緩存前最好 sync 下,防止數(shù)據(jù)丟失 /proc 是一個(gè)虛擬文件系統(tǒng),我們可以通過對它的讀寫操作作為與 kernel 實(shí)體間進(jìn)行 通信的一種手段。也就是說可以通過修改/proc 中的文件,來對當(dāng)前 kernel 的行為做出調(diào) 整。也就是說我們可以通過調(diào)整/proc/sys/vm/drop_caches 來釋放內(nèi)存 0 – 不釋放 1 – 釋放頁緩存-->用來清空最近放問過的文件頁面緩存 2 – 釋放 dentries 和 inodes-->用來清空文件節(jié)點(diǎn)緩存和目錄項(xiàng)緩存 3 – 釋放所有緩存-->用來清空 1 和 2 所有內(nèi)容的緩存。 [root@pagoda63 ~]# echo >3 /proc/sys/vm/drop_caches 課后作業(yè):仔細(xì)推敲所講的知識(shí)點(diǎn)。多練習(xí)。有問題隨時(shí)留言!我會(huì)及時(shí)回復(fù)。明天我們實(shí)戰(zhàn):screen 后臺(tái)實(shí)時(shí)執(zhí)行命令備份命令。 |
|