linux下建立新的進程
進程時每個系統下必不可少的一個部分。每個進程都有一個非負證整數的惟一進程ID。進程ID標識符老是惟一的。通常在linux建立一個進程是同fork()函數的。linux
函數fork()的原型函數
pid_t fork(void)
這個函數的主要主要特點是返回兩次值,子進程返回0,父進程返回子進程ID。出錯則返回-1。經過實例來了解一下這個函數。spa
#include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { pid_t pid; int globalx = 2; if ((pid = fork()) > 0){ int a = 1; printf("parent is %d \n",a) } else if (pid == 0) { int a = 1; a++; printf("child is %d \n",a); } else { printf("error"); } printf("all have: %d \n",globalx); exit(0); }
運行的結果以下code
由這個例子的看的出來,他們惟一的區別只是在pid>0下的代碼和pid==0下的的代碼。fork()以後父函數和子函數實現不一樣的代碼段,並且相互之間並不影響。
咱們在再看下一個例子。進程
#include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { pid_t pid; int globalx = 2; if ((pid = fork()) > 0){ int a = 1; for(int i=0;i<10;i++) printf("parent is %d \n",a); } else if (pid == 0) { int a = 1; a++; for(int i=0;i<10;i++) printf("child is %d \n",a); } else { printf("error"); } printf("all have: %d \n",globalx); exit(0); }
運行的結果以下圖片
當咱們在那兩個代碼塊加入循環時,就能夠發現子進程和父進程,能夠說時各自獨立的,它們之間沒有前後關係。若是子進場和父進程同時對一個文件進行操做,則須要考慮到這一點。原型
以上基本上是fork()函數兩大特色。若是有錯誤和遺漏的地方,歡迎指出和補充。it