日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux进程管理命令实验,实验2Linux进程管理.doc

發(fā)布時(shí)間:2024/1/23 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux进程管理命令实验,实验2Linux进程管理.doc 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

實(shí)驗(yàn)2Linux進(jìn)程管理

實(shí)驗(yàn)2 Linux進(jìn)程管理

實(shí)驗(yàn)?zāi)康?/p>

1、加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別

2、進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)

3、分析進(jìn)程爭(zhēng)用資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法

實(shí)驗(yàn)性質(zhì)

驗(yàn)證性實(shí)驗(yàn),必做,3課時(shí)

預(yù)習(xí)與實(shí)驗(yàn)要求

1、閱讀Linux的sched.h源碼文件,加深對(duì)進(jìn)程概念的理解

2、閱讀Linux的fork.c源碼文件,分析進(jìn)程的創(chuàng)建過(guò)程

要用到的系統(tǒng)調(diào)用

1、int fork 創(chuàng)建一個(gè)新進(jìn)程

頭文件:#include #include 返回值的意義:0,創(chuàng)建子進(jìn)程,從子進(jìn)程返回的id值 -1,創(chuàng)建失敗 大于0,從父進(jìn)程返回的子進(jìn)程id值

2、lockf files, function, size 鎖定/解鎖文件或文件的某段

該函數(shù)的頭文件為:#include

參數(shù)定義:int lockf int files, int function, long size

含義:files是文件描述符;

function為1(常量F_LOCK)表示互斥鎖定,為0(常量F_ULOCK)表示解鎖;

size是鎖定或解鎖的字節(jié)數(shù),若用0,表示從文件的當(dāng)前位置到文件尾。

實(shí)驗(yàn)內(nèi)容

創(chuàng)建進(jìn)程。

輸入并運(yùn)行下面的程序。思考為什么會(huì)輸出兩行信息。【建議用emacs或gedit編輯】

int main int pid;

pid fork ;

switch pid case -1: printf "fail to create process\n" ; return 1;

case 0: //對(duì)于子進(jìn)程來(lái)講,變量pid的值為0 printf "I'm son, my pid is %d, my father's pid is %d\n", getpid , getppid ; break;

default: //對(duì)于父進(jìn)程來(lái)講,pid記錄了返回的子進(jìn)程的ID,必然大于0 printf "I'm father, my pid is %d, my son's pid is %d\n", getpid , pid ; return 0; 輸出結(jié)果并非是一行,而是2行。比如,結(jié)果可能是:

I'm son, my pid is 1860, my father's pid is 1859

I'm father, my pid is 1859, my son's pid is 1860

解釋:

fork函數(shù)被調(diào)用一次但返回兩次。兩次返回的唯一區(qū)別:子進(jìn)程中返回0值,父進(jìn)程中返回子進(jìn)程ID。

為什么返回兩次?原因:linux將父進(jìn)程的地址空間、數(shù)據(jù)空間、堆、棧等資源復(fù)制一份給子進(jìn)程,子進(jìn)程是父進(jìn)程的副本,只有代碼段是共享的。注意:由于在復(fù)制時(shí)復(fù)制了父進(jìn)程的堆棧段,所以兩個(gè)進(jìn)程都停留在fork函數(shù)中,等待返回。不同的是,fork 返回給父進(jìn)程的是新建子進(jìn)程的ID,返回給子進(jìn)程的是0。

如果對(duì)“返回”還難以理解,想一下學(xué)C語(yǔ)言時(shí)候的函數(shù)調(diào)用。函數(shù)調(diào)用時(shí),將返回地址入棧,再將實(shí)參入棧。被調(diào)函數(shù)從棧中取出參數(shù),賦值給形參,執(zhí)行完后,取出返回地址,跳回去繼續(xù)執(zhí)行。

1、驗(yàn)證進(jìn)程并發(fā)執(zhí)行

編寫一段程序,使用系統(tǒng)調(diào)用fork 創(chuàng)建兩個(gè)子進(jìn)程。當(dāng)此程序運(yùn)行時(shí),在系統(tǒng)中有一個(gè)父進(jìn)程和兩個(gè)子進(jìn)程活動(dòng)。讓每個(gè)進(jìn)程在屏幕上顯示一個(gè)字符串:父進(jìn)程顯示“parent is working”;兩個(gè)子進(jìn)程分別顯示“son is working”和“daughter is working”。多運(yùn)行幾次該程序,觀察屏幕上的顯示結(jié)果,并分析原因。

文件名為a21.c

#include

main int p1,p2;

while p1 fork -1 ;/*創(chuàng)建子進(jìn)程,將其ID號(hào)給p1,直到成功*/

if p1 0 printf “son is working\n” ;/*子進(jìn)程返回的p1才為0,說(shuō)明此時(shí)子進(jìn)程執(zhí)行*/

else /*p1 0,說(shuō)明此p1是父進(jìn)程函數(shù)調(diào)用返回的子進(jìn)程的ID號(hào)*/

while p2 fork -1 ;/*創(chuàng)建子進(jìn)程p2,將其ID號(hào)給p2,直到成功*/

if p2 0 printf “dauthter is working” ; /*子進(jìn)程p2執(zhí)行*/

else printf “parent” ; /*父進(jìn)程執(zhí)行*/ printf “share\n” ;/*3個(gè)進(jìn)程共享的語(yǔ)句*/ 執(zhí)行:用gcc a21.c –o a21.out編譯,產(chǎn)生a21.out文件。在終端里輸入./a21.out,并回車執(zhí)行。看結(jié)果。再按向上箭頭,并回車重復(fù)執(zhí)行。看結(jié)果。如此多執(zhí)行幾次。

分析:可以認(rèn)為,父進(jìn)程和兩個(gè)子進(jìn)程有相同的代碼。相當(dāng)于,上述程序有3份在內(nèi)存。它們并發(fā)執(zhí)行,但它們返回的

總結(jié)

以上是生活随笔為你收集整理的linux进程管理命令实验,实验2Linux进程管理.doc的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。