前言
Linux 是多道處理系統,當然能夠在同一段時間內處理多個程式。
本文將介紹具體該如何操作。
fork 函式
此函式的作用是建立一個子程式,呼叫後,呼叫程式和建立的新程式就會併發執行( 從呼叫處開始 )。它呼叫一次,卻返回兩次,一次是在呼叫程式內,返回子程式ID,另一次是在建立的新程式( 子程式 )內,返回 0。
函式的具體說明請參閱相關文件。
併發程式碼框架
1 #include <stdio.h> 2 #include <unistd.h> 3 4 int main (void) { 5 6 int pid; 7 8 if ((pid = fork()) == 0) { 9 10 /* 11 * 此處填寫子程式程式碼 12 */ 13 14 } 15 else if (pid < 0) { 16 17 /* 18 * 此處填寫錯誤處理程式碼 19 */ 20 21 } 22 else { 23 24 /* 25 * 此處填寫父程式程式碼 26 */ 27 28 } 29 30 return 0; 31 }
程式碼實現
此程式將讓兩個程式交替的每隔 1 秒列印它們的各自程式 ID:
1 #include <stdio.h> 2 #include <unistd.h> 3 4 int main (void) { 5 6 int pid; 7 8 if ((pid = fork()) == 0) { 9 while (1) { 10 sleep(1); 11 printf("I am %d \n", getpid()); 12 } 13 } 14 else if (pid < 0) { 15 printf("建立子程式失敗\n"); 16 return 1; 17 18 } 19 else { 20 while (1) { 21 sleep(1); 22 printf("I am %d \n", getpid()); 23 } 24 } 25 26 return 0; 27 }
執行測試
小結
1. 本文講述的是最簡單最基本的併發實現,很多更復雜的併發實現都是基於這個框架的。
2. 如果要確保子程式先執行,並且在啟動子程式後立馬 exec 一個新程式的話,請將 fork 換成 vfork。