1. 程式人生 > >linx c fork()函式的多層巢狀

linx c fork()函式的多層巢狀

有哪些巢狀問題呢?

1)建立多個程序分別做一樣的事

程式碼案例:

#include <stdio.h>
#include <unistd.h>

int main(int arg,char* argv[]){
	// 設定fork返回值
	pid_t pid;
	// 建立多個子程序,childNum為子程序個數
	for(int i = 0,childNum = 2;i < childNum;i++){
		pid = fork();
		// 是父程序 continue ,for()五次,若是子程序,break該for迴圈,即子程序無需經歷for迴圈
		if(pid==0 || pid<0)
			break;
	}
	if(pid < 0){
		printf("ERROR:fork child process failure\n");
	}
	// 子程序迴圈體
	else if(pid == 0){
		printf("create sub process id: %d, parent id: %d\n", getpid(), getppid());
		// pause 子程序進入睡眠,即阻塞住所有子程序,直到被訊號(signal)所中斷.
		//while(1) pause();
	}
	// 父程序執行體
	else{
		sleep(1);
		printf("Parent process %d sleep 1 s\n", getpid());
		sleep(1);
	}

	return 0;
}

結果:

2)建立多個程序分別做不一樣的事

程式碼案例:

#include <stdio.h>
#include <unistd.h>

int main(int arg,char* argv[]){
	pid_t pid = fork();

	if(pid < 0){
		//fork失敗
		printf("fork error\n");
	}else if(0 == pid){
		//fork後的子程序的執行體

		//父程序的子程序建立子程序,即父程序的孫程序
		pid = fork();
		if(pid < 0){
			printf("fork error\n");
		}else if(0 == pid){
			// 孫程序執行體
			printf("sun process is run,processid is %d ,my parentprocess is %d\n",getpid(),getppid());
		}else{
			// 子程序執行體
			sleep(1);
			printf("child process is run,processid is %d ,my parentprocess is %d\n",getpid(),getppid());
		}

	}else{
		//父程序的執行體
		sleep(1);
		printf("Parent process is run,processid is %d \n",getpid());
		sleep(1);
	}

	return 0;
}

執行結果: