openEuler系統(tǒng)管理- 課件 第8章 系統(tǒng)啟動(dòng)與進(jìn)程管理_第1頁(yè)
openEuler系統(tǒng)管理- 課件 第8章 系統(tǒng)啟動(dòng)與進(jìn)程管理_第2頁(yè)
openEuler系統(tǒng)管理- 課件 第8章 系統(tǒng)啟動(dòng)與進(jìn)程管理_第3頁(yè)
openEuler系統(tǒng)管理- 課件 第8章 系統(tǒng)啟動(dòng)與進(jìn)程管理_第4頁(yè)
openEuler系統(tǒng)管理- 課件 第8章 系統(tǒng)啟動(dòng)與進(jìn)程管理_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

系統(tǒng)啟動(dòng)與進(jìn)程管理深入了解openEuler系統(tǒng)啟動(dòng)與進(jìn)程管理01理解系統(tǒng)啟動(dòng)的重要性與原理系統(tǒng)啟動(dòng)管理在ARM架構(gòu)中,UEFI的執(zhí)行過程同樣是先初始化硬件設(shè)備,引導(dǎo)EFI系統(tǒng)運(yùn)行,然后找到GPT中的BootLoader并啟動(dòng)。BIOS的執(zhí)行過程是先初始化硬件設(shè)備,獲取主機(jī)的各項(xiàng)硬件配置,然后將MBR中的BootLoader讀取到內(nèi)存中,并將控制權(quán)交給BootLoader。BIOS一般會(huì)被寫入主板ROM中,主要功能是初始化硬件,提供硬件的軟件抽象。在硬件啟動(dòng)這一階段,需要達(dá)成的目的是借助BIOS/UEFI將硬件的控制權(quán)轉(zhuǎn)交給BootLoader,為后續(xù)的系統(tǒng)啟動(dòng)做好準(zhǔn)備。啟動(dòng)目的硬件啟動(dòng)的目的是借助固定的程序,將硬件的控制權(quán)轉(zhuǎn)交給BootLoader。因?yàn)椴僮飨到y(tǒng)由硬件上的不同文件組成,需要一個(gè)固定程序?qū)硬煌僮飨到y(tǒng)并啟動(dòng)主引導(dǎo)程序。BIOS執(zhí)行UEFI執(zhí)行硬件啟動(dòng)根據(jù)硬件的差別,硬件啟動(dòng)一般主要有兩種方式,即BIOS和UEFI。在x86架構(gòu)中,以BIOS為主;在ARM架構(gòu)中,以UEFI為主。狹義的BIOS指BIOS本身,廣義的BIOS包括UEFI,UEFI的生態(tài)更加開放??刂茩?quán)轉(zhuǎn)交啟動(dòng)方式GRUB2相比GRUBLegacy具有更多功能,如加密操作系統(tǒng)、恢復(fù)系統(tǒng)密碼、定制開機(jī)畫面等,為用戶提供了更多的選擇和便利。功能增強(qiáng)在這個(gè)階段中,BootLoader會(huì)將控制權(quán)轉(zhuǎn)交給內(nèi)核,啟動(dòng)內(nèi)核之后,接下來(lái)的任務(wù)將交由內(nèi)核完成。控制權(quán)轉(zhuǎn)交BootLoader是一類程序的總稱,如LILO、GRUBLegacy等,一般也稱為內(nèi)核加載程序。GRUB2是GRUB的升級(jí)版,能實(shí)現(xiàn)選擇不同的操作系統(tǒng)啟動(dòng)項(xiàng)、動(dòng)態(tài)改變引導(dǎo)參數(shù)等更多功能。由于GRUBLegacy啟動(dòng)加載器當(dāng)前已經(jīng)難以維護(hù),所以GRUB重寫了代碼,并在其基礎(chǔ)上實(shí)現(xiàn)了模塊化,增強(qiáng)了移植性。GRUB升級(jí)在openEuler操作系統(tǒng)啟動(dòng)過程中,BootLoader引導(dǎo)階段的任務(wù)是加載Linux內(nèi)核以及可選的初始RAM磁盤。它可以選擇磁盤上多個(gè)操作系統(tǒng)內(nèi)核中的一個(gè)進(jìn)行啟動(dòng),或從系統(tǒng)分區(qū)中選擇特殊的內(nèi)核配置。引導(dǎo)任務(wù)BootLoader引導(dǎo)程序總稱階段進(jìn)入首個(gè)進(jìn)程systemd具有啟動(dòng)速度快、按需啟動(dòng)服務(wù)、管理掛載點(diǎn)等多種優(yōu)勢(shì),能夠更好地實(shí)現(xiàn)系統(tǒng)的初始化和服務(wù)管理。內(nèi)核引導(dǎo)由systemd或init完成相關(guān)的啟動(dòng)過程,包括啟動(dòng)服務(wù)、啟動(dòng)Shell等。systemd在系統(tǒng)初始化方面具有更多的優(yōu)勢(shì)和功能。隨著技術(shù)的發(fā)展,systemd逐漸替代init成為主流的系統(tǒng)初始化工具,openEuler也順應(yīng)了這一趨勢(shì),采用systemd來(lái)提高系統(tǒng)的性能和管理效率。systemd優(yōu)勢(shì)在完成內(nèi)核加載程序啟動(dòng)之后,就進(jìn)入內(nèi)核引導(dǎo)階段。此時(shí)操作系統(tǒng)會(huì)將控制權(quán)由內(nèi)核轉(zhuǎn)交給運(yùn)行中的進(jìn)程systemd或init。openEuler操作系統(tǒng)啟動(dòng)過程中的第一個(gè)進(jìn)程是PID為1的進(jìn)程,它就是systemd或init。當(dāng)前大部分的Linux發(fā)行版都采用systemd來(lái)代替init,openEuler也采用systemd來(lái)實(shí)現(xiàn)系統(tǒng)初始化功能。替代init啟動(dòng)過程14523啟動(dòng)某個(gè)target的時(shí)候,systemd就會(huì)啟動(dòng)里面所有的unit。用戶可以通過修改unit文件自定義unit,并將多個(gè)unit設(shè)為一個(gè)target,按計(jì)劃啟動(dòng)。啟動(dòng)方式systemd在系統(tǒng)初始化過程中起著關(guān)鍵的作用,它能夠有效地管理和協(xié)調(diào)各個(gè)服務(wù)的啟動(dòng),確保系統(tǒng)的正常運(yùn)行。初始化主體系統(tǒng)初始化階段由systemd完成。systemd啟動(dòng)之后,會(huì)根據(jù)預(yù)先設(shè)定的target運(yùn)行相應(yīng)的服務(wù)。系統(tǒng)初始化用戶可以自定義啟動(dòng)單元或者修改啟動(dòng)順序,以滿足不同的使用需求。例如,用戶可以根據(jù)自己的業(yè)務(wù)需求,調(diào)整某些服務(wù)的啟動(dòng)順序。服務(wù)內(nèi)容這些服務(wù)包括按/etc/fstab掛載目錄、設(shè)定定時(shí)器、啟動(dòng)日志等。target是一個(gè)unit組,包含許多相關(guān)的unit。自定義啟動(dòng)systemd作用啟動(dòng)終端為用戶提供了與系統(tǒng)進(jìn)行交互的界面,用戶可以在終端中輸入命令,執(zhí)行各種操作,實(shí)現(xiàn)對(duì)系統(tǒng)的管理和使用。啟動(dòng)終端啟動(dòng)完成終端切換至此,通過以上5個(gè)階段,控制權(quán)從硬件一路轉(zhuǎn)交至軟件,最終傳遞到用戶手中,openEuler操作系統(tǒng)啟動(dòng)完成。在控制臺(tái)上,模擬這6個(gè)tty字符終端,分別對(duì)應(yīng)/dev/tty1/~6,可以按“Alt+Fn”(Fn表示F1~F6)組合鍵來(lái)進(jìn)行切換。/dev/tty0為桌面終端,也就是用戶目前正在使用的終端。用戶交互終端指的是用戶交互界面或者接口。在系統(tǒng)完成初始化之后,首先會(huì)執(zhí)行/sbin/mingetty開啟6個(gè)tty字符終端。驗(yàn)證登錄操作系統(tǒng)會(huì)比對(duì)/etc/nologin、/etc/passwd、/etc/shadow等文件進(jìn)行驗(yàn)證登錄。在登錄成功后,屏幕將輸出相關(guān)信息,并加載用戶目錄下設(shè)置的環(huán)境變量,等待用戶輸入。終端定義02了解systemd的特性與配置系統(tǒng)初始化配置systemd支持按需啟動(dòng),系統(tǒng)運(yùn)行狀態(tài)動(dòng)態(tài)變化,用戶難以準(zhǔn)確知道系統(tǒng)當(dāng)前運(yùn)行的服務(wù)。systemd快照功能提供了將當(dāng)前系統(tǒng)運(yùn)行狀態(tài)保存并恢復(fù)的保障。掛載點(diǎn)管理systemd具有比UpStart強(qiáng)的并行啟動(dòng)能力,采用了socket和D-Bus激活等技術(shù)啟動(dòng)服務(wù),啟動(dòng)速度更快。它的宗旨是盡可能減少不必要的進(jìn)程,并且將更多的進(jìn)程并行啟動(dòng)。事務(wù)性依賴管理系統(tǒng)啟動(dòng)過程中各工作可能存在依賴關(guān)系,systemd維護(hù)著“事務(wù)一致性”的概念,確保所有相關(guān)的服務(wù)都可以正常啟動(dòng)而不會(huì)出現(xiàn)互相依賴、死鎖的情況。傳統(tǒng)的Linux系統(tǒng)中,用戶通過/etc/fstab文件維護(hù)固定的文件系統(tǒng)掛載點(diǎn)。而systemd內(nèi)建了自動(dòng)掛載服務(wù),實(shí)現(xiàn)了動(dòng)態(tài)掛載,同時(shí)兼容/etc/fstab文件,用戶無(wú)須另外安裝autofs服務(wù)。啟動(dòng)速度快按需啟動(dòng)服務(wù)系統(tǒng)快照與恢復(fù)systemd具有按需啟動(dòng)的能力,只有在某個(gè)服務(wù)被真正請(qǐng)求的時(shí)候才啟動(dòng)它。當(dāng)該服務(wù)結(jié)束時(shí),systemd可以關(guān)閉它,等待下次需要時(shí)再次啟動(dòng),避免了服務(wù)啟動(dòng)時(shí)間過長(zhǎng)以及系統(tǒng)資源的浪費(fèi)。systemd特性u(píng)nit查看路徑systemd具有和SysV以及LSB初始化腳本兼容的特性。系統(tǒng)中已經(jīng)存在的服務(wù)和進(jìn)程無(wú)須修改,降低了系統(tǒng)向systemd遷移的成本,使得systemd替換現(xiàn)有初始化系統(tǒng)成為可能。當(dāng)存在同名文件時(shí),優(yōu)先采用優(yōu)先級(jí)較高的配置文件,確保系統(tǒng)使用正確的配置。systemd其他特性systemd開啟和監(jiān)督操作系統(tǒng)是基于unit的,unit的名稱由一個(gè)與配置文件對(duì)應(yīng)的名字和類型組成。unit有多種類型,如Serviceunit、Targetunit等。兼容性操作單位路徑優(yōu)先級(jí)systemd采用cgroup特性跟蹤和管理進(jìn)程的生命周期。cgroup主要用來(lái)實(shí)現(xiàn)系統(tǒng)資源配額管理,提供了類似文件系統(tǒng)的接口,使用方便。當(dāng)進(jìn)程創(chuàng)建子進(jìn)程時(shí),子進(jìn)程會(huì)繼承父進(jìn)程的cgroup。所有可用的systemdunit可以通過3條路徑查看,分別是/usr/lib/systemd/system/、/run/systemd/system/、/etc/systemd/system/,這3條路徑的優(yōu)先級(jí)自上而下遞減。進(jìn)程管理unit類型介紹systemd開啟和監(jiān)督操作系統(tǒng)是基于unit的,也就是說(shuō),systemd操作的基本單位是unit。unit的名稱由一個(gè)與配置文件對(duì)應(yīng)的名字和類型組成。例如name.serviceunit有一個(gè)具有相同名字的配置文件,是守護(hù)進(jìn)程name的一個(gè)封裝單元。unit查看與優(yōu)先級(jí)所有可用的systemdunit可以通過以下3條路徑查看:

在/usr/lib/systemd/system/目錄下,可查看軟件包安裝時(shí)產(chǎn)生的systemdunit;

在/run/systemd/system/目錄下,可查看運(yùn)行時(shí)創(chuàng)建的systemdunit;

在/etc/systemd/system/目錄下,可查看由root用戶創(chuàng)建和管理的systemdunit。這3條路徑的優(yōu)先級(jí)自上而下遞減,即存在同名文件時(shí),優(yōu)先采用優(yōu)先級(jí)較高的配置文件。openEuler運(yùn)行級(jí)別運(yùn)行級(jí)別定義運(yùn)行級(jí)別定義了服務(wù)器啟動(dòng)后的狀態(tài)。在openEuler操作系統(tǒng)中,systemd用目標(biāo)替代運(yùn)行級(jí)別的概念,提供了更大的靈活性。常規(guī)運(yùn)行級(jí)別目標(biāo)描述0runlevel0.target、poweroff.target關(guān)閉系統(tǒng)1/s/singlerunlevel1.target、rescue.target單用戶模式2、4runlevel2.target、runlevel4.target、multi-user.target用戶定義/域特定運(yùn)行級(jí)別。默認(rèn)等同于33runlevel3.target、multi-user.target多用戶,非圖形化環(huán)境。用戶可以通過多個(gè)控制臺(tái)或網(wǎng)絡(luò)登錄5runlevel5.target、graphical.target多用戶,圖形化環(huán)境。通常為所有運(yùn)行級(jí)別為3的服務(wù)外加圖形化登錄6runlevel6.target、reboot.target重啟系統(tǒng)rescuerescure.target救援模式emergencyemergency.target緊急模式(緊急Shell)救援與緊急模式在救援模式下,將掛載所有本地文件系統(tǒng),但不會(huì)啟動(dòng)正常服務(wù),比如網(wǎng)絡(luò)等,只會(huì)啟動(dòng)很少的服務(wù)。救援模式多用于系統(tǒng)無(wú)法正常啟動(dòng)的情況,此外,可以在救援模式下執(zhí)行一些重要的救援操作,例如重置root密碼。如需要改變當(dāng)前系統(tǒng)為救援模式,可在root權(quán)限下執(zhí)行如下命令:[root@openEuler~]#systemctlrescue命令執(zhí)行后,窗口會(huì)有如下輸出信息:Youareinrescuemode.Afterloggingin,type"journalctl-xb"toviewsystemlogs,"systemctlreboot"toreboot,"systemctldefault"or"exit"tobootintodefaultmode.Giverootpasswordformaintenance(orpressControl-Dtocontinue):假如此時(shí)想要從救援模式切換到正常模式,需要重啟操作系統(tǒng)。與救援模式相比,緊急模式下不啟動(dòng)任何服務(wù),不會(huì)掛載任何文件系統(tǒng),用戶只會(huì)打開一個(gè)原始的Shell。因此緊急模式多適用于調(diào)試目的和修復(fù)系統(tǒng)。如需要改變當(dāng)前系統(tǒng)為緊急模式,可在root權(quán)限下執(zhí)行如下命令:[root@openEuler~]#systemctlemergency命令執(zhí)行后,窗口會(huì)有如下輸出信息:Youareinemergencymode.Afterloggingin,type"journalctl-xb"toviewsystemlogs,"systemctlreboot"toreboot,"systemctldefault"or"exit"tobootintodefaultmode.Giverootpasswordformaintenance(orpressControl-Dtocontinue):假如此時(shí)想要從緊急模式切換到正常模式,同樣需要重啟操作系統(tǒng)。在openEuler中,systemd提供systemctl命令來(lái)運(yùn)行、關(guān)閉、重啟、顯示、啟用、禁用系統(tǒng)服務(wù)。與sysvinit命令功能類似,當(dāng)前版本依然兼容service和chkconfig命令,但建議統(tǒng)一用systemctl進(jìn)行系統(tǒng)服務(wù)管理。systemctl命令openEuler服務(wù)控制target是一組unit的集合,所以當(dāng)用戶想在systemd中自定義一些服務(wù)模塊時(shí),只需在相應(yīng)的target目錄下寫入unit配置文件即可。每個(gè)unit對(duì)應(yīng)一個(gè).service文件(即服務(wù)),這些服務(wù)分為兩類:系統(tǒng)服務(wù)和用戶服務(wù)。系統(tǒng)服務(wù)是用戶登錄前運(yùn)行的程序,而用戶服務(wù)是用戶登錄后運(yùn)行的程序。對(duì)于每個(gè).service文件,需要配置3個(gè)字段:Unit代表啟動(dòng)順序與依賴關(guān)系;Service代表啟動(dòng)行為,是必選字段;Install代表服務(wù)所在的target。openEuler服務(wù)控制以u(píng)ser.service為例,使自定義服務(wù)模塊生效并設(shè)置自啟動(dòng),有以下兩種方法。

直接使用systemctl命令:[root@openEuler~]#systemctlenableusr.service

手動(dòng)創(chuàng)建軟連接:[root@openEuler~]#ln-s/usr/lib/systemd/system/user.service/usr/lib/systemd/

system/local-fs.target.wants/usr.service執(zhí)行以下命令重新加載,使配置生效。[root@openEuler~]#systemctldaemon-reloadopenEuler服務(wù)控制以u(píng)ser.service為例,使自定義服務(wù)模塊生效并設(shè)置自啟動(dòng),有以下兩種方法。

直接使用systemctl命令:[root@openEuler~]#systemctlenableusr.service

手動(dòng)創(chuàng)建軟連接:[root@openEuler~]#ln-s/usr/lib/systemd/system/user.service/usr/lib/systemd/

system/local-fs.target.wants/usr.service執(zhí)行以下命令重新加載,使配置生效。[root@openEuler~]#systemctldaemon-reloadopenEuler服務(wù)控制【示例8-5】#查詢服務(wù)是否被激活[root@openEuler~]#systemctlis-activename.serviceinactive選項(xiàng)is-active的返回結(jié)果及說(shuō)明如表8-5所示。openEuler服務(wù)控制【示例8-6】#查詢服務(wù)是否開機(jī)啟動(dòng)[root@openEuler~]#systemctlis-enabledfirewalld.servicedisabled選項(xiàng)is-enabled的返回結(jié)果及說(shuō)明如表所示。返回結(jié)果說(shuō)明enabled服務(wù)已經(jīng)通過/etc/systemd/system/目錄下的Alias=別名、.wants/或.requires/符號(hào)鏈接被永久啟用enabled-runtime已經(jīng)通過/run/systemd/system/目錄下的Alias=別名、.wants/或.requires/符號(hào)鏈接被臨時(shí)啟用linked雖然單元文件本身不在標(biāo)準(zhǔn)單元目錄中,但是指向此單元文件的一個(gè)或多個(gè)符號(hào)鏈接已經(jīng)存在于/etc/systemd/system/永久目錄中l(wèi)inked-runtime雖然單元文件本身不在標(biāo)準(zhǔn)單元目錄中,但是指向此單元文件的一個(gè)或多個(gè)符號(hào)鏈接已經(jīng)存在于/run/systemd/system/臨時(shí)目錄中masked已經(jīng)被/etc/systemd/system/目錄永久屏蔽(符號(hào)鏈接指向/dev/null文件),因此start操作會(huì)失敗masked-runtime已經(jīng)被/run/systemd/systemd/目錄臨時(shí)屏蔽(符號(hào)鏈接指向/dev/null文件),因此start操作會(huì)失敗static服務(wù)尚未被啟用,并且單元文件的Install字段中沒有可用于enable命令的選項(xiàng)indirect服務(wù)尚未被啟用,但是單元文件的Install字段中Also選項(xiàng)的值列表非空(也就是列表中的某些單元可能已被啟用),或者該服務(wù)擁有其他別名符號(hào)鏈接disabled服務(wù)尚未被啟用,但是單元文件的Install字段中存在可以使enable命令有效的選項(xiàng)generated單元文件是被單元生成器動(dòng)態(tài)生成的。被生成的單元文件可能并未被直接啟用,而是被單元生成器隱式啟用transient單元文件是被運(yùn)行時(shí)API動(dòng)態(tài)臨時(shí)生成的。臨時(shí)單元文件可能并未被啟用bad單元文件不正確或者出現(xiàn)其他錯(cuò)誤openEuler服務(wù)控制【示例8-7】#列出Nginx的所有依賴[root@openEuler~]#systemctllist-dependenciesnginx.service#列出Nginx的所有依賴,包括依賴的target內(nèi)容[root@openEuler~]#systemctllist-dependencies--allnginx.servicesystemd還支持通過systemctl命令對(duì)系統(tǒng)進(jìn)行關(guān)機(jī)、重啟、休眠等一系列操作,同時(shí)也能兼容部分Linux常用管理命令。systemctl系統(tǒng)管理命令及功能如表8-7所示。系統(tǒng)啟動(dòng)與進(jìn)程管理openEuler進(jìn)程管理全面解析第8章02多任務(wù)系統(tǒng)的進(jìn)程調(diào)配與監(jiān)控進(jìn)程管理進(jìn)程的概念為了讓程序源碼從人類易于理解的高級(jí)語(yǔ)言轉(zhuǎn)換成計(jì)算機(jī)能夠執(zhí)行的機(jī)器語(yǔ)言,所有程序都需要經(jīng)過編譯、鏈接、加載和執(zhí)行4個(gè)階段。但在同一段時(shí)間內(nèi),機(jī)器通常并不只執(zhí)行一個(gè)程序,而是并發(fā)地執(zhí)行多個(gè)程序。因此,為了對(duì)并發(fā)執(zhí)行的程序加以描述和控制,操作系統(tǒng)引入了“進(jìn)程”這一抽象概念。進(jìn)程是計(jì)算機(jī)中已運(yùn)行程序的實(shí)體,是程序的具體實(shí)現(xiàn)。如圖所示,每個(gè)進(jìn)程在被創(chuàng)建的時(shí)候,都會(huì)被分配一段內(nèi)存空間,即系統(tǒng)給進(jìn)程分配一定的邏輯地址空間,包含棧、堆、bss段、data段和代碼段。每個(gè)進(jìn)程都有一個(gè)唯一的PID,用于系統(tǒng)內(nèi)核追蹤相應(yīng)進(jìn)程。操作系統(tǒng)的第一個(gè)進(jìn)程是systemd,其他所有進(jìn)程都是其后代,它的PID為1。每個(gè)進(jìn)程都有自己的生命周期,包括創(chuàng)建、執(zhí)行、終止和刪除等階段。在系統(tǒng)運(yùn)行過程中,這些階段將被反復(fù)執(zhí)行成千上萬(wàn)次。進(jìn)程的概念任何進(jìn)程都可以通過復(fù)制自己地址空間的方式創(chuàng)建子進(jìn)程,子進(jìn)程中記錄著父進(jìn)程的PID(PPID)。當(dāng)一個(gè)進(jìn)程創(chuàng)建一個(gè)新進(jìn)程時(shí),創(chuàng)建進(jìn)程的進(jìn)程(父進(jìn)程)使用名為fork()的系統(tǒng)調(diào)用。當(dāng)fork()被調(diào)用的時(shí)候,它會(huì)為新創(chuàng)建的進(jìn)程(子進(jìn)程)獲得一個(gè)進(jìn)程描述符,并且設(shè)置新的PID,復(fù)制父進(jìn)程的進(jìn)程描述符給子進(jìn)程。系統(tǒng)使用exec()調(diào)用把新程序復(fù)制到子進(jìn)程的地址空間。由于共享同樣的地址空間,寫入新進(jìn)程的數(shù)據(jù)會(huì)引發(fā)頁(yè)錯(cuò)誤的異常。因此,此時(shí)內(nèi)核會(huì)給子進(jìn)程分配新的物理頁(yè)。當(dāng)程序執(zhí)行完成時(shí),使用exit()系統(tǒng)調(diào)用來(lái)終止子進(jìn)程。exit()會(huì)釋放進(jìn)程的大部分?jǐn)?shù)據(jù)結(jié)構(gòu),并且把相應(yīng)終止消息通知給父進(jìn)程。此時(shí),子進(jìn)程被稱為僵尸進(jìn)程(ZombieProcess)。進(jìn)程的概念直到父進(jìn)程通過wait()系統(tǒng)調(diào)用知悉子進(jìn)程終止之前,子進(jìn)程都不會(huì)被完全清除。只有父進(jìn)程知悉子進(jìn)程終止時(shí),它才會(huì)清除子進(jìn)程的所有數(shù)據(jù)結(jié)構(gòu)和進(jìn)程描述符。進(jìn)程在其生命周期中會(huì)在各個(gè)狀態(tài)中切換。

運(yùn)行態(tài)(用戶運(yùn)行態(tài)和內(nèi)核運(yùn)行態(tài))和就緒態(tài)合并為運(yùn)行狀態(tài),表示進(jìn)程正在運(yùn)行或準(zhǔn)備運(yùn)行。openEuler操作系統(tǒng)中使用TASK_RUNNING宏表示此狀態(tài)。

可中斷睡眠態(tài)(淺度睡眠):進(jìn)程正在睡眠(被阻塞),等待資源到來(lái)時(shí)被喚醒,也可以通過其他進(jìn)程信號(hào)或時(shí)鐘中斷來(lái)喚醒,進(jìn)入運(yùn)行隊(duì)列。openEuler

操作系統(tǒng)使用TASK_INTERRUPTIBLE宏表示此狀態(tài)。

不可中斷睡眠態(tài)(深度睡眠):它和可中斷睡眠態(tài)基本類似,但有一點(diǎn)不同,就是不可被其他進(jìn)程信號(hào)或時(shí)鐘中斷喚醒。openEule操作系統(tǒng)使用TASK_UNINTERRUPTIBLE宏表示此狀態(tài)。

暫停狀態(tài):進(jìn)程暫停執(zhí)行并接受某種處理,如正在接受調(diào)試的進(jìn)程處于此狀態(tài)。openEuler操作系統(tǒng)使用TASK_STOPPED宏表示此狀態(tài)。

僵停狀態(tài):進(jìn)程已經(jīng)結(jié)束但未釋放。openEuler操作系統(tǒng)使用TASK_ZOMBIE宏表示此狀態(tài)。取值范圍操作系統(tǒng)基于優(yōu)先級(jí)分配CPU資源。優(yōu)先級(jí)高的進(jìn)程有優(yōu)先執(zhí)行的權(quán)利,操作系統(tǒng)會(huì)根據(jù)進(jìn)程的優(yōu)先級(jí)來(lái)決定CPU時(shí)間的分配。例如,對(duì)于實(shí)時(shí)性要求較高的進(jìn)程,會(huì)給予較高的優(yōu)先級(jí),確保其能夠及時(shí)得到執(zhí)行。優(yōu)先級(jí)概念PRI與NIPRI表示執(zhí)行先后順序,NI影響優(yōu)先級(jí)。PRI是進(jìn)程的優(yōu)先級(jí)數(shù)值,其值越小,進(jìn)程的優(yōu)先級(jí)越高;NI是nice值,可理解為“謙讓度”,通過調(diào)整NI值可以影響進(jìn)程的優(yōu)先級(jí)。例如,當(dāng)NI值為負(fù)值時(shí),進(jìn)程的優(yōu)先級(jí)會(huì)變高進(jìn)程優(yōu)先級(jí)使用nice和renice命令調(diào)整。nice和renice命令可以調(diào)整進(jìn)程的nice值,從而改變進(jìn)程的優(yōu)先級(jí)。nice命令用于在啟動(dòng)進(jìn)程時(shí)設(shè)置其優(yōu)先級(jí),renice命令可以對(duì)已經(jīng)運(yùn)行的進(jìn)程的優(yōu)先級(jí)進(jìn)行調(diào)整。例如,使用nice-n-18vi可以將Vi編輯器的運(yùn)行優(yōu)先級(jí)設(shè)置為-18。優(yōu)先級(jí)調(diào)整nice和renice取值為-20~19。nice和renice命令的取值范圍是-20~19,在這個(gè)范圍內(nèi)調(diào)整nice值可以有效地改變進(jìn)程的優(yōu)先級(jí)。例如,將nice值設(shè)置為-20可以使進(jìn)程具有最高的優(yōu)先級(jí)。查看用戶進(jìn)程who命令主要用于查看當(dāng)前系統(tǒng)中的用戶進(jìn)程情況。如果用戶需要確認(rèn)其他用戶是否發(fā)起進(jìn)程,或者root用戶希望監(jiān)視每個(gè)登錄的用戶此時(shí)此刻的所作所為,就可以使用who命令。who命令使用起來(lái)非常方便,可以比較準(zhǔn)確地反映用戶的情況,因此應(yīng)用非常廣泛?!臼纠?-11】#查看當(dāng)前系統(tǒng)中的用戶情況[root@openEuler~]#whorootpts/02022-07-3119:54()查看進(jìn)程ps命令是最基本且非常強(qiáng)大的進(jìn)程查看命令之一。使用該命令可以確定有哪些進(jìn)程正在運(yùn)行、運(yùn)行的狀態(tài)、進(jìn)程是否結(jié)束、有沒有僵尸進(jìn)程、哪些進(jìn)程占用了過多的資源等信息。大部分進(jìn)程信息都是可以通過執(zhí)行該命令得到的。此外,ps命令還可以用于監(jiān)控后臺(tái)進(jìn)程的工作情況?!臼纠?-12】#顯示系統(tǒng)終端上的所有進(jìn)程[root@openEuler~]#ps-aPIDTTYTIMECMD12175pts/600:00:00bash24526pts/000:00:00vsftpd29478pts/500:00:00ps32461pts/01-01:58:33sh中斷進(jìn)程命令格式:kill[-s[信號(hào)]|-p][-a][進(jìn)程號(hào)]...kill-l[信號(hào)]kill命令是通過向進(jìn)程發(fā)送指定的信號(hào)來(lái)結(jié)束進(jìn)程的。如果沒有指定發(fā)送的信號(hào),那么默認(rèn)為TERM信號(hào)。TERM信號(hào)將終止所有不能捕獲該信號(hào)的進(jìn)程。至于那些可以捕獲該信號(hào)的進(jìn)程可能就需要使用kill-9命令才能終止。通常執(zhí)行kill命令前,需要通過ps等命令確定需要中斷的進(jìn)程號(hào)。【示例8-13】#顯示系統(tǒng)終端上的所有進(jìn)程,確定要中斷的進(jìn)程號(hào)[root@openEuler~]#ps-aPIDTTYTIMECMD12175pts/600:00:00bash24526pts/000:00:00vsftpd29478pts/500:00:00ps32461pts/01-01:58:33sh[root@openEuler~]#kill-932461調(diào)度進(jìn)程(1)定時(shí)執(zhí)行程序。用戶使用at命令可以在指定時(shí)刻執(zhí)行指定的命令序列,該命令至少需要指定一個(gè)命令和一個(gè)執(zhí)行時(shí)間。at命令可以只指定時(shí)間,也可以一起指定時(shí)間和日期。命令格式:at[-V][-q[隊(duì)列]][-f[文件名]][-mldbv][時(shí)間]at-c[作業(yè)][作業(yè)]...at命令允許使用一套相當(dāng)復(fù)雜的時(shí)間指定方法,如下所示。接受在當(dāng)天的hh:mm(小時(shí):分鐘)式的時(shí)間指定。如果該時(shí)間已經(jīng)過去,那么就延至第二天執(zhí)行。使用midnight(深夜)、noon(中午)等比較模糊的詞語(yǔ)來(lái)指定時(shí)間。采用12小時(shí)計(jì)時(shí)制,即在時(shí)間后面加上am(上午)或者pm(下午)來(lái)說(shuō)明是上午還是下午。指定命令執(zhí)行的具體日期,指定格式為monthday(月日)或者mm/dd/yy(月/日/年)或者dd.mm.yy(日.月.年)。指定的日期必須跟在指定時(shí)間的后面。調(diào)度進(jìn)程(2)周期性運(yùn)行任務(wù)。at命令會(huì)在某一時(shí)間執(zhí)行一定的任務(wù),但是它只能執(zhí)行一次。也就是說(shuō),當(dāng)指定了運(yùn)行命令后,系統(tǒng)在指定時(shí)間執(zhí)行任務(wù)了后,命令就不會(huì)再執(zhí)行了。但是在很多情況下需要周期性重復(fù)執(zhí)行一些命令,這時(shí)候就需要使用crontab命令調(diào)用后臺(tái)cron進(jìn)程來(lái)實(shí)現(xiàn)。crontab命令用于安裝、刪除或者顯示用于驅(qū)動(dòng)cron進(jìn)程的表格。用戶把需要執(zhí)行的命令序列放到crontab文件中以獲得執(zhí)行,每個(gè)用戶都可以擁有自己的crontab文件。調(diào)度進(jìn)程cron服務(wù)的內(nèi)容由crontab文件指定,因此需要在crontab文件中輸入需要執(zhí)行的命令和時(shí)間。該文件中每行都包括6個(gè)域,其中前5個(gè)域是指定命令被執(zhí)行的時(shí)間,最后一個(gè)域是要被執(zhí)行的命令。每個(gè)域之間使用空格或者制表符分隔,格式如下:minutehourday-of-monthmonth-of-yearday-of-weekcommands這些域都不能為空,必須指定值。除了指定數(shù)字,還可以指定幾個(gè)特殊的符號(hào),即“*”“/”“-”“,”其中,“*”代表取值范圍內(nèi)的所有數(shù)字,“/”代表每的意思,“*/5”表示每5個(gè)單位,“-”代表從某個(gè)數(shù)字到某個(gè)數(shù)字,“,”用于分開幾個(gè)離散數(shù)字。對(duì)于要執(zhí)行的命令,調(diào)用的時(shí)候需要寫出命令的完整路徑。調(diào)度進(jìn)程(3)掛起/恢復(fù)進(jìn)程。將“&”放在命令的最后,便可把相應(yīng)命令放到后臺(tái)執(zhí)行。作業(yè)控制允許進(jìn)程掛起并可以在需要時(shí)恢復(fù)進(jìn)程的運(yùn)行,被掛起的進(jìn)程恢復(fù)后將從中止處開始繼續(xù)運(yùn)行。只要在鍵盤上按“Ctrl+Z”組合鍵,即可掛起當(dāng)前的前臺(tái)作業(yè)或當(dāng)前執(zhí)行的命令。使用jobs命令可以顯示Shell的作業(yè)清單,包括具體的作業(yè)、作業(yè)號(hào)以及作業(yè)當(dāng)前所處的狀態(tài)?;謴?fù)進(jìn)程執(zhí)行時(shí),有兩種選擇:用fg命令將掛起的作業(yè)放回到前臺(tái)執(zhí)行;用bg命令將掛起的作業(yè)放到后臺(tái)執(zhí)行。靈活使用上述命令,將大大方便用戶對(duì)于進(jìn)程的使用及控制。系統(tǒng)性能監(jiān)控#查看操作系統(tǒng)概要信息[root@openEuler~]#cat/etc/os-releaseNAME="openEuler"VERSION="20.03(LTS)"ID="openEuler"VERSION_ID="20.03"PRETTY_NAME="openEuler20.03(LTS)"ANSI_COLOR="0;31"#查看CPU信息[root@openEuler~]#lscpu#查看內(nèi)存信息[root@openEuler~]#freetotalusedfreesharedbuff/cacheavailableMem:1513184186392994024628332768991828Swap:000#默認(rèn)以KB為單位計(jì)算內(nèi)存大小,為更美觀地讀取及輸出,可加上-m\g選項(xiàng),表示以MB或GB為單位計(jì)算系統(tǒng)性能監(jiān)控#查看磁盤信息[root@openEuler~]#dfFilesystem SizeUsedAvailUse%Mountedondevtmpfs 725M0725M0%/devtmpfs 739M0739M0%/dev/shmtmpfs 739M624K739M1%/runtmpfs 739M0739M0%/sys/fs/cgroup/dev/mapper/openeuler-root 9.8G2.7G6.6G29%/tmpfs 739M4.0K739M1%/tmp/dev/sda1 190M138M38M79%/boot/dev/sda2 200M8.0K200M1%/boot/efi/dev/mapper/openeuler-swap 3.9G16M3.7G1%/swaptmpfs 148M0148M0%/run/user/0top命令iotop命令vmstat命令netstat命令性能監(jiān)控工具toptop命令提供了實(shí)時(shí)對(duì)系統(tǒng)狀態(tài)進(jìn)行監(jiān)控的功能,也能顯示系統(tǒng)當(dāng)前的進(jìn)程和其他狀況。它可以按CPU使用、內(nèi)存使用和執(zhí)行時(shí)間等對(duì)系統(tǒng)中的進(jìn)程進(jìn)行排序。top命令的很多特性都可以通過交互式命令或者在定制文件中進(jìn)行設(shè)定。top命令執(zhí)行結(jié)果的第一行顯示的是概況信息,分別為當(dāng)前系統(tǒng)時(shí)間,開機(jī)到現(xiàn)在經(jīng)過的時(shí)間,當(dāng)前登錄到該計(jì)算機(jī)的用戶數(shù)量,系統(tǒng)1min、5min、15min內(nèi)的平均負(fù)載值。第二行是進(jìn)程計(jì)數(shù)信息,分別顯示進(jìn)程總數(shù)、正在運(yùn)行的進(jìn)程數(shù)、睡眠進(jìn)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論