linux之C編程學習——進程,進程,進程!

來源:互聯網
上載者:User

標籤:

  linux支援多個進程同時進行,也就是我們常說的現代作業系統中的多道程式設計,所謂同時是linux系統調度各個進程分別佔用cpu的時間。由於每個時間片的時間很小和宏觀時間相比,給人的感覺是多個進程在運行。為了提高程式的運行效率,程式往往分成多個部分組成,這也就是說的並發程式設計。並發程式中各進程是相互獨立的,在必要的時候會通過相應的機制進行通訊。若進程間要共用資源,為了避免出現衝突,常通過相應通訊機制使它們輪流使用共用資源。在進程進行通訊時,會出現一個進程等另一個進程完,才能繼續啟動並執行情況,這也需要處理序間通訊以瞭解對方的運行情況。有時進程間會出現互斥現象,這是會用到鎖機制。在並發程式設計中,進程的建立和結束是由使用者決定的。這也就出現了父進程和子進程概念。

進程的建立:

1 #include <unistd.h>  2   3 pid_t fork(void);   4 pid_t vfork(void); 

  在這簡述,fork建立的子進程是父進程的一個拷貝,但是和父進程使用不同的資料區段和堆棧。vfork和fork基本相同但是vfork不會複製父進程的資料區段,它們共用資料區段。這是因為vfork常和exec函數使用去調用一個程式如ls命令,開啟一個新的進程。vfork後父進程會等待子進程運行結束或調用了exit。fork後父進程和子進程的運行順序是不確定的。

下面是體現它們性質的程式:

 1 #include <sys/types.h>   2 #include <stdio.h>   3 #include <stdlib.h>   4 #include <unistd.h>   5     6 main()     7 {   8      pid_tpid;   9      char*pchar = "before fork";  10      inttest_va = 1;  11   12      if((pid= fork()) < 0 )  13      {  14          printf("forkerror!!\n");  15          exit(1);  16      }  17   18      elseif(pid == 0)  19      {  20          printf("childprocess\n");  21          pchar= "child pchr\n";  22          printf("%s\n",pchar);  23   24          test_va= 2;  25   26          printf("%d\n",test_va);  27          _exit(2);  28      }  29   30      else  31      {  32          printf("parentprocess\n");  33          printf("%s\n",pchar);  34          printf("%d\n",test_va);  35      }    36 } 

fork:

vfork:

 

linux之C編程學習——進程,進程,進程!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.