日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Linux基礎(chǔ)之——進(jìn)程管理

 靜幻堂 2018-09-15
互聯(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)程)

Linux基礎(chǔ)之——進(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

Linux基礎(chǔ)之——進(jìn)程管理

Linux基礎(chǔ)之——進(jìn)程管理

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)

Linux基礎(chǔ)之——進(jìn)程管理

顯示目錄樹形結(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

Linux基礎(chǔ)之——進(jìn)程管理

[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)程

Linux基礎(chǔ)之——進(jìn)程管理

pidof 按確切的進(jìn)程名查找

pidof vim 查看 yes 的 pid

kill -9 `pidof vim`直接殺死 yes 進(jìn)程

擴(kuò)展:yes 命令:無限打印指定內(nèi)容

yes kklkl

Linux基礎(chǔ)之——進(jìn)程管理

top 動(dòng)態(tài)查看進(jìn)程

作用:統(tǒng)計(jì)信息區(qū)前五行是系統(tǒng)整體的統(tǒng)計(jì)信息。

Linux基礎(chǔ)之——進(jìn)程管理

動(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í)行命令備份命令。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多