Linux学习笔记-exec族函数
Posted 波子木木
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习笔记-exec族函数相关的知识,希望对你有一定的参考价值。
昨天学习了Linux下的进程创建,创建一个进程的方法极为简单,只需要调用fork函数就可以创建出一个进程,但是……
介绍fork()函数的时候提到,在创建进程后,子进程与父进程有相同的代码空间,执行的是和父进程完全一样的代码……
那这样的话,我辛辛苦苦创建一个进程,还有什么意义?
辛辛苦苦的养大了一个儿子,难道就是为了让他走老子的老路?
带着满心的疑惑,我又进行了下一章的学习,突然恍然大悟,原来还有一个叫exec族函数的东西,专门就是用来给新创建的进程分配工作的。
调用exec族函数并不创建进程,因此前后进程的ID并无改变,exec只是用一个全新的程序替换当前进程的执行程序。
exec族函数有6个不同的exec函数。现在我就用fork来创建一个子进程,并且用exec族函数来给他分配一个新的工作。
子进程的程序:
#include<stdio.h> #include<stdlib.h> #include<unistd.h> int main(void) { printf("我是儿子,我的名字叫%d,我爹叫%d.我现在成为了一个科学家!\\n",getpid(),getppid()); return 0; }
父进程的程序:
#include<unistd.h> #include<stdio.h> #include<stdlib.h> #include<errno.h> int main(void) { pid_t pid; pid = fork(); if(pid < 0) { printf("媳妇难缠,儿子死了,死亡代码%d.\\n",errno); } else if(pid == 0) { // printf("儿子出生了!\\n"); execle("pro_sun",NULL,NULL,NULL); } else { printf("我是爹,我的名字叫%d,我的儿子叫%d.\\n",getpid(),pid); } wait(NULL); return 0; }
编译,执行,结果如下:
完美运行!!!
撸一把,睡觉~
以上是关于Linux学习笔记-exec族函数的主要内容,如果未能解决你的问题,请参考以下文章