溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

進程的基礎內(nèi)容

發(fā)布時間:2020-07-13 13:51:11 來源:網(wǎng)絡 閱讀:288 作者:咖啡澀 欄目:編程語言

進程

線程

通信(本機,網(wǎng)絡)

進程的屬性和概念:

進程和程序之間的區(qū)別是什么:

1進程是動態(tài)的

2程序是靜態(tài)的

readelf -a 名字                讀取該程序的所有內(nèi)容

file a.out     查看該文件的信息

mmu 內(nèi)存管理單元         是在內(nèi)核里面

MMU管理內(nèi)存大小        一個文件,先映射到4個G虛擬內(nèi)存里面,最后存到真實內(nèi)存里面。

線程是程序執(zhí)行和資源管理的最小單位

進程不僅包括程序的指令和數(shù)據(jù),而且包括程序計數(shù)器值,CPU的所有寄存器以及存儲。。。。

進程號PID。

交互進程: 該類進程是由SHELL控制和運行的,交互進程既可以在前臺運行,也可以在后臺運行。

ps -elf 看運行狀態(tài)。

CPU在某一時刻,只能運行一個進程

時間片,將CPU的運行時間切成一份一份的,每一份就是一個進程執(zhí)行的時間t1,時間到,則換一個進程執(zhí)行。

CPU分為內(nèi)核模式和用戶模式

4個G空間,3G空間為用戶空間,,1G空間為內(nèi)核空間。

內(nèi)核執(zhí)行代碼權限比較高。

內(nèi)核模式:特權模式,內(nèi)核模式的代碼可以無限制的訪問所有處理器指令集以及全部內(nèi)存和空間。

                           

用戶模式:訪問資源受限,部分代碼不可以執(zhí)行。

                 用戶模式靠系統(tǒng)調(diào)用,來獲得權限。

man手冊很重要,一定要掌握怎么用

man 2 系統(tǒng)調(diào)用

用戶模式的代碼允許發(fā)生缺頁,內(nèi)核模式的代碼則不允許。

int 0x80 系統(tǒng)中斷。

ps -l 只顯示跟當前終端信息。

pstree 樹進程

pstree -p顯示進程號

大括號括起來的是線程

top 動態(tài)顯示系統(tǒng)中的進程

renice調(diào)整正在運行的程序優(yōu)先級

renice -20 PID 將優(yōu)先級調(diào)高    (-20~19)只能調(diào)整這么大,稍微調(diào)整,不能無限制調(diào)整優(yōu)先級

nice -20  ./a.out  調(diào)整優(yōu)先級

nice -n -20 ./process/basic/a.out

按用戶指定的優(yōu)先級運行進程

kill -l   所有信號。   kill結束進程

SIGALRM14  鬧鐘信號

9,19號信號,終止進程。。18號信號SIGCONT暫停信號

17信號SIGCHLD 子進程結束的時候會發(fā)這個給父進程

  jobs 查看后臺運行程序  直接輸入jobs   

./a.out &    放后臺運行

bg把已暫停的進程恢復到后臺運行

fg 將后臺運行的進程放到前臺。

進程創(chuàng)建 fork()

fork() 創(chuàng)建一個新的進程,復制一個調(diào)用進程,這個新的進程是一個子進程,

拷貝了父進程空間,如果成功,父進程會得到子進程的ID號,并且子進程會返回0

追蹤 CTRL +]

反追中 CTRL +t

getpid()獲取當前進程的id, getppid()獲取父進程的id。

子進程可以獲取父進程ID。

fork()  .一次調(diào)用,兩次返回,在父進程中返回子進程的編號,子進程中返回0

創(chuàng)建子進程之后,,子進程和父進程一樣擁有CPU,先后運行順序不確定。

fork()創(chuàng)建子進程之后,兩個進程都會從FORK后面的第一條匯編代碼執(zhí)行

fork()執(zhí)行后,執(zhí)行賦值語句,然后執(zhí)行判斷語句。

AT定時命令。

{

at 15:34

at> ls ~/ >dev/pts/1

at> ls -l >  /dev/pts/1

at> echo"hello at" >/dev/pts/1

atq查看當前任務

atrm 34取消任務

}

crontab定時任務

{

sudo vi /etc/crontab

在這里面輸入。

{周期的執(zhí)行任務

怎么取消任務。。

,可以進去注釋掉。

}

當創(chuàng)建一個進程的時候,內(nèi)核里面會創(chuàng)建一個結構體 task_struct{}  //linux.2.6.35/include/linux.c 1100

這個結構體描述了進程的所有信息。

但子進程的代碼不在這里,在4G空間里面  。進程return后 4G空間會刪掉。。內(nèi)核里面的結構體卻不會沒有釋放掉。,但因為4G內(nèi)存已經(jīng)不存在了,所以這個結構體代表的進程就是僵尸進程。

當父進程結束的時候,子進程的僵尸進程也會釋放掉。

寫時復制技術。

4G虛擬內(nèi)存全部映射了,,實際內(nèi)存中只有改動了的數(shù)據(jù)才會拷貝。

vfork()

子進程一定先運行。進程結束后要加exit(0);

vfork()的子進程完完全全的共享父進程的物理空間。父進程創(chuàng)建子進程后,保證創(chuàng)建的子進程一定會先運行,運行結束,父進程再運行。子進程結束一定要調(diào)用_exit或者exec函數(shù)族。否則結果未知。

因為共享同一個物理空間,所以子進程修改的參數(shù),就是父進程的參數(shù),它倆用的是同一個參數(shù)。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI