1. 程式人生 > 實用技巧 >程序的建立、執行和終止實驗 作業系統實驗

程序的建立、執行和終止實驗 作業系統實驗

程序的建立、執行和終止實驗

目的: 本實驗的目的是通過使用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()函式等待子程序,子程序結束之後,程式退出。