亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Linux服務器 > 正文

深入解讀Linux進程函數fork(),vfork(),execX()

2024-09-05 23:04:34
字體:
來源:轉載
供稿:網友

本文研究的主要是Linux進程函數fork(),vfork(),execX()的相關內容,具體介紹如下。

函數fork()

fork函數:創建一個新進程

1、fork()成功后,將為子進程申請PCB和用戶內存空間。
2、子進程會復制父進程用戶空間的所有數據(代碼段、數據段、BSS、堆、棧),文件描述符。
3、復制父親進程PCB中絕大多數信息。
4、雖然子進程復制了文件描述符,而對于文件描述符相關的文件表項(struct file結構),則采用共享的方式。

一個實例:

#include <unistd.h> //fork fuction#include <fcntl.h> //file operator#include <sys/types.h>#include <stdio.h> #include <stdlib.h> //exit fuction#include <string.h>int main() { pid_t pid; int i=1;  int status; char *ch1="hello",*ch2="world",*ch3="IN"; int fd; if ((fd=open("fork.txt",O_RDWR|O_CREAT,0644))==-1) { perror("not open"); exit(EXIT_FAILURE); } if (write(fd,ch1,strlen(ch1))==-1) { //write in fork.txt perror("not write"); exit(EXIT_FAILURE); } if ((pid=fork())==-1) { perror("fork error");  exit(EXIT_FAILURE); } else if(pid==0) {  //son process int i=2;   //change i printf("child:i=%d/n",i); if (write(fd,ch2,strlen(ch2))==-1) perror("child write"); return 0; } else { sleep(1); printf("parent:i=%d/n",i); if (write(fd,ch3,strlen(ch3))==-1) perror("child write"); wait(&status); return 0; }}

運行:

[root@localhost linux/168284.html">linux/198087.html">linux]# gcc -o fork fork.c [root@localhost linux]# ./fork child:i=2 parent:i=1

可以看到在子進程中改變了i的值,然而父進程i仍為1,所以說子進程和父進程有自己的用戶空間。而打開所創建的fork.txt可以得到hellowordIN,父子進程共同對一個文件操作寫入的數據是不交叉覆蓋的,說明父子進程共享文件偏移,一次共享文件表項。

函數vfork()

與fork()函數不同,vfork()函數在創建進程是并不復制父進程的地址空間,而是在必要的時候才申請新的存儲空間,因此使得vfork()更有效率。

特別注意的是vfork()是共享父進程的代碼以數據段。

一個例子:

#include <unistd.h> //fork fuction#include <fcntl.h> //file operator#include <sys/types.h>#include <stdio.h> #include <stdlib.h> //exit fuction#include <string.h>int i=10;int main() { pid_t pid; if ((pid=fork())==-1) { perror("fork error");  exit(EXIT_FAILURE); } else if(pid==0) {  //son process i++; printf("child:i=%d/n",i); _exit(0);   } else { sleep(1); printf("parent:i=%d/n",i); return 0; }}

注意:上面的代碼中回收子進程用的是_exit(0),如果用return 0;的話它會回收用戶空間,因此在父進程調用的時候會出現段錯誤。

下面是調用輸出結果:

如果以fork()創建則會輸出: [root@localhost linux]# ./fork child:i=11 parent:i=10 如果改為vfork(),則: child:i=11 parent:i=11

函數exec X()系列函數

用fork()函數創建紫禁城后,如果希望在當前子進程中運行新的程序,則可以調用execX系列函數。
注意:當進程調用exec函數后,該進程的用戶空間資源完全有新程序代替。
這些函數的區別在于:

1、指示新程序的位置是路徑還是文件名
2、在使用參數時是使用參數列表哈市使用argv[]數組
3、后綴有l(list)表示使用參數列表,v表示使用argv[]數組

具體如下所示:

#include<unistd.h>int execl(const char *pathname,const char *arg0,.../*(char *) 0 */);int execv(const char *pathname,char *const argv[]);int execle(const char *pathname,const char *arg0,.../*(char *) 0 ,char *const envp[] */);int execve(const char *pathname,char *const argv[],char *const envp[]);int execlp(const char *filename,const char*arg0,.../*(char *) 0*/);int execvp(const char *filename, char *const argv[]);int fexecve(int fd,char *const argv[],char *const evnp[]);

一個實例:

#include <unistd.h>#include <stdio.h>#include <sys/types.h>int main(int argc ,char* argv[]) { pid_t pid; if ((pid=fork())==-1) printf("error"); else if (pid==0)  execl("/bin/ls","ls","-l",argv[1],(char *)0); else printf("father ok/n");}

運行可以看到在子進程中執行了ls命令。

[yqtao@localhost linux]$ gcc -o exec execX.c[yqtao@localhost linux]$ ./exec /home father ok

//execlp()函數使用

#include <unistd.h>#include <stdio.h>#include <sys/types.h>int main(int argc ,char* argv[]) { execlp("ls","ls","-l","/home",(char*)0);}

//execv()函數的使用

#include <unistd.h>#include <stdio.h>#include <sys/types.h>int main(int argc ,char* argv[]) { char* argv1[]={"ls","-l","/home",0}; execv("/bin/ls",argv1);}

ecvp()會從環境變量PATH所指定的目錄中查找文件名作為第一個參數,第二個及以后的參數由參數列表,注意最后一個成員必須為NULL

#include <unistd.h>#include <stdio.h>#include <sys/types.h>int main(int argc ,char* argv[]) { char* argv1[]={"ls","-l","/home",0}; execvp("ls",argv1);}

總結

以上就是本文關于深入解讀Linux進程函數fork(),vfork(),execX()的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲福利视频网| 精品久久久一区| 视频在线观看99| 在线观看日韩欧美| 91禁外国网站| 91欧美日韩一区| 欧美日韩中国免费专区在线看| 国产一区二区三区中文| 性欧美xxxx交| 2019中文字幕在线免费观看| 亚洲欧美激情四射在线日| 懂色aⅴ精品一区二区三区蜜月| 国产一区二区三区中文| 亚洲欧洲日产国码av系列天堂| 亚洲人午夜精品| 精品香蕉在线观看视频一| 欧美老肥婆性猛交视频| 国产精品入口日韩视频大尺度| 久久成人国产精品| 美女视频黄免费的亚洲男人天堂| 欧美电影免费播放| 欧美日韩福利视频| 一区二区三区精品99久久| 欧美日韩国产影院| 国产成人亚洲综合91| 国产98色在线| 69av成年福利视频| 91亚洲永久免费精品| 欧美精品做受xxx性少妇| 亚洲一区中文字幕| 免费91麻豆精品国产自产在线观看| 国产精品www色诱视频| 久久男人资源视频| zzijzzij亚洲日本成熟少妇| 午夜精品久久久久久久99热| 日韩女优人人人人射在线视频| 日韩免费观看高清| 欧美成人sm免费视频| 亚洲网站在线播放| 亚洲精品按摩视频| 日韩成人av网| 中文字幕久久久av一区| 国产精品日韩一区| 亚洲激情久久久| 亚洲精品网站在线播放gif| 精品国产一区av| 久青草国产97香蕉在线视频| 激情成人在线视频| 亚洲综合自拍一区| 国产精品久久久久久五月尺| 91精品国产自产在线| 欧美日韩人人澡狠狠躁视频| 中文字幕亚洲一区在线观看| 色综合久久久久久中文网| 国产日韩在线播放| 亚洲最大激情中文字幕| 亚洲成人久久久| 日韩av综合中文字幕| 97视频网站入口| 欧美一级视频一区二区| 81精品国产乱码久久久久久| 国产精品久久av| 亚洲偷熟乱区亚洲香蕉av| 欧美成年人在线观看| 亚洲精品欧美日韩| 国产精品国产自产拍高清av水多| 久久免费视频这里只有精品| 日韩69视频在线观看| 川上优av一区二区线观看| 精品国产一区二区三区久久| 伊人青青综合网站| 成人免费视频xnxx.com| 国产欧美在线播放| 欧美激情视频三区| 欧洲精品在线视频| 国产精品亚洲网站| 国产日韩av高清| 日韩高清欧美高清| 亚洲最大福利视频网| 2019中文字幕在线| 欧美黑人巨大精品一区二区| 亚洲精品videossex少妇| 色av中文字幕一区| 精品久久久久久久久久久久久久| 日本久久中文字幕| 欧美成人精品不卡视频在线观看| 亚洲美女视频网站| 国产一区二区三区在线免费观看| 国产精品嫩草影院一区二区| 亚洲综合精品伊人久久| 亚洲伊人成综合成人网| 亚洲国语精品自产拍在线观看| 日韩精品中文字幕在线播放| 久久久久国色av免费观看性色| 日韩网站免费观看| 久久久成人精品视频| 国产一区二区在线免费视频| 91沈先生作品| 久久精品国产电影| 中文字幕亚洲一区二区三区五十路| 亚洲新中文字幕| 日韩在线视频国产| 欧美一级片免费在线| 亚洲精品影视在线观看| 奇门遁甲1982国语版免费观看高清| 国产精品高潮粉嫩av| 国产91精品久久久久| 亚洲成人黄色网址| 8050国产精品久久久久久| 91av在线播放视频| 国产精品爽黄69| 久久久国产一区二区三区| 国产精品h在线观看| 日韩大片在线观看视频| 久久久国产在线视频| 日韩av电影在线网| 亚洲人永久免费| 亚洲美女动态图120秒| 91精品免费久久久久久久久| 国内成人精品一区| 亚洲18私人小影院| 欧美日韩在线看| 亚洲一区二区三区毛片| 538国产精品视频一区二区| 精品国产美女在线| 黑人巨大精品欧美一区二区一视频| 欧美精品在线免费| 最新亚洲国产精品| 久久久免费在线观看| 好吊成人免视频| 久久乐国产精品| 久久资源免费视频| 亚洲第一偷拍网| 久久精品免费播放| 日韩免费黄色av| 国产精品亚洲一区二区三区| 亚洲精品日韩欧美| 国产日韩在线精品av| 日韩av影视综合网| 国产精品pans私拍| 亚洲香蕉成视频在线观看| 欧美成年人视频网站欧美| 日韩免费精品视频| 欧美一区二区三区免费观看| 色综合男人天堂| 国内精品模特av私拍在线观看| 亚洲欧美日韩综合| 97视频在线观看免费| 91免费国产网站| 欧美人交a欧美精品| 亚洲一区二区三区久久| 国内精品久久久久久久| 日本最新高清不卡中文字幕| 久久久www成人免费精品张筱雨| 欧美精品亚州精品| 国产suv精品一区二区| 在线丨暗呦小u女国产精品| 日韩一区二区在线视频| 九九热r在线视频精品| 国产中文字幕日韩| 亚洲大胆人体视频| 日韩av中文字幕在线播放| 久久精品国产69国产精品亚洲| 在线丨暗呦小u女国产精品|