程序的建立、執行和終止實驗 作業系統實驗
阿新 • • 發佈:2020-12-28
程序的建立、執行和終止實驗
目的: 本實驗的目的是通過使用Linux的系統呼叫fork()、exec()、exit()編寫一個程式,加深理解程序的建立、執行和終止等內容。
內容:
(1)利用fork()函式建立兩個子程序。讓系統中的3個程序分別輸出一個不同的字元。觀察並記錄螢幕上顯示的結果,分析原因。
(2)利用fork()和execlp()函式實驗一個shell的基本功能,如圖所示。使用者輸入命令後,按下列步驟執行使用者命令:
1:利用fork()函式建立一個子程序。
2:利用execlp()函式啟動命令程式。
3:利用wait()函式使父程序和子程序同步。
第一題程式碼:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { pid_t pid_1 = fork(); pid_t pid_2 = fork(); if (pid_1 == 0) { printf("我是子程序一號\t程序號是:%d\n", getpid()); exit(0); } if (pid_2 == 0) { printf("我是子程序二號\t程序號是:%d\n", getpid()); exit(0); } if (pid_1 != 0 && pid_2 != 0) { printf("我是父程序\t程序號是:%d\n", getpid()); } }
執行結果:
第二題程式碼:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
int main(void)
{
wait(0);
pid_t pid = fork();
if (pid == 0)
{
execlp("ls", "ls", "-al", "../../../../", NULL);
}
}
執行結果:
實驗分析:
第一題中用了兩次fork但是最後程式卻運行了四次,很明顯不是建立了兩個子程序,而是建立了三個,在第一個fork()被呼叫時建立了一個子程序。這時程式有兩個程序。而由於父程序和子程序共享程式碼段,新被建立的子程序再次執行了這兩個fork(),所以實際上第一個fork()是被執行了兩次的,因此一共有四個程序。而且經過多次執行並觀察結果發現,這幾個程序執行的順序是不確定的,它們是並行執行的。
第二題中先用建立了一個子程序,用過execlp()命令啟用shell的ls功能檢視資料夾。與此同時主程序通過wait()函式等待子程序,子程序結束之後,程式退出。