操作系統第二次實驗:創建進程


0.個人信息

姓名:王璐璐

學號:201821121037

班級:計算1812

1.編寫程序

用vim編寫程序——使用fork()創建兩個子進程。代碼如下:

 #include <stdio.h>
 #include <sys/types.h>
 #include <unistd.h>
 int main(){
     pid_t fpid;
     fpid=fork();
     if(fpid<0){
         printf("error");
     }
     else if (fpid==0){
         printf("child process 1,process id: %d\n",getpid());
     }
     else{
         pid_t fpid2=fork();
         if(fpid2<0){
             printf("error2");
         }
         else if(fpid2==0){
             printf("child process 2,process id: %d\n",getpid());
         }
         else{
             printf("parent process,process id: %d\n",getpid());
         }
         sleep(500);         //延遲100秒,進程掛起
     }
 }

編譯過程:

得到的程序運行結果圖如下:

2.打印進程樹

(1)在代碼中創建完進程后,使用sleep(500)函數,將進程掛起了500秒。

(2)方法一:打開兩個控制台,一個開啟程序,一個打印進程樹;

(3)使用命令打印出上述進程的進程樹,結果如下:

其中15250為父進程的pid號,15251和15252分別為兩個子進程的pid號

(4)方法二:用“&”將進程放置后台運行,再打印進程樹

3.解讀進程相關信息

3.1解讀

(1)下圖中紅色框表示的是查找到的與創建的父子進程相關的進程信息:

(2)執行后,會有以下幾個字段

UID        PID  PPID  C STIME TTY          TIME CMD

(3)根據執行fork.c程序,解釋上述的幾個字段含義:

①UID:表示用戶的ID。在該實驗中,用戶ID是wanglulu,這是我登錄服務器時的用戶名;

②PID:表示某一個進程的ID號。在該實驗中,fork.c創建了三個進程,其進程ID號分別為15250,15251,15252;

③PPID:表示某一個進程的父進程ID號。在該實驗中,fork.c創建了一個父進程和兩個子進程,從結果圖中可以看出進程ID15251和15252的父進程ID均為15250;

④C:表示CPU使用的資源百分比。在該實驗中,三個進程的資源百分比均為0;

⑤STIME:表示程序啟動時間。從該實驗的結果圖中,可以發現創建父進程的同時會將兩個子進程創建好,這三個進程的創建時間是一致的;

⑥TTY:表示進程與控制終端的關聯值。由於fork.c中創建的三個進程是父子關系,這三個進程最后得到TTY值是一樣的,值pts/1表示在桌面Linux中是標准輸出;

⑦TIME:表示進程使用的總CPU時間。由結果圖可知,創建進程無需使用CPU

⑧CMD:所下達的指令名稱

3.2解讀

(1)下圖是執行命令后得到的字段結果:

(2)執行后,會有以下幾個字段:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

(3)根據執行fork.c程序,解釋上述的幾個字段含義:

①USER:表示的含義與使用“ps -ef”中的字段“UID”相類似;

②PID:同“ps -ef”中的“PID”;

③%CPU:同“ps -ef”中的“C”;

④%MEM:表示該進程所占用的物理內存百分比。在該實驗中顯示這三個進程所占的物理內存百分比均為0;

⑤VSZ:表示的是該進程使用掉的虛擬內存量 (Kbytes)。由結果圖可以看出父進程和第二個子進程均開辟了4508Kbytes大小的空間,由於第一個子進程處於僵死狀態,第一個子進程並未占空間,即每次使用fork()創建一個進程時,都會開辟一個大小相同的虛擬內存空間;

⑥RSS:表示的是該進程占用的固定的內存量 (Kbytes)。從結果圖中可以看出父進程所占用的固定內存量比子進程的大很多,子進程所占有的固定內存量是一致的;

⑦TTY:同“ps -ef”中的“TTY”;

⑧STAT:表示的是該程序目前的狀態。由結果圖中可以得出,父進程和第二個子進程正處於睡眠狀態中,而第一個子進程處於終止狀態,但父進程未將該子進程進行回收;

⑨START:表示的是該進程被觸發啟動的時間;

⑩TIME:表示的是該進程實際使用 CPU 運作的時間;COMMAND:同“ps -ef”中的“CMD”

4.問題

(1)創建的子進程中,第一個子進程的狀態處於僵死狀態,還未找到錯誤處;

5.相關鏈接

TTY值的取值含義解釋:https://blog.csdn.net/u013115811/article/details/78849165


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM