Linux笔记记录3 exec
(≡ω≡.)笔记记得乱七八糟的 整理的时候总是发表完才想起来好像少了什么。
------------------------------------------------------------------------------------------------
看完fork就要轮到exec函数族了。
其实我们用fork创建完子进程后还需要调用一种exec函数,fork+exec得到的才是一个新的进程。
其实这个过程是这样的`fork得到的子进程继承了父进程数据、堆和栈的副本(并不共享存储空间!)
所以它相当于父进程的一个副本,由于现在的fork具有写时拷贝功能,只有要修改数据时他才会进行拷贝。
通过exec函数,可以将子进程替换为一个新的程序,也就是说正文、数据、堆、栈都替换了!
值得注意的是,这个新程序不改变进程id,它是从main开始执行的。
先来认识一下exec函数族的成员们:
#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[]);
Execl、execlp execle
参数个数可变,但每个参数要单独说明
Execv、execvp,execve
先构造一个指向各参数的指针数组作为参数。
他们都会把argv传给main
Execlp、execvp
通过搜索path环境变量查找文件路径
于是接下来又是栗子啦,偷个懒 直接截图
//a.c QAQ为什么我的用户名水印后面跟着一串和我企鹅号不一样的数字啊啊啊啊
//bbb.c QAQ为什么我的用户名水印后面跟着一串和我企鹅号不一样的数字啊啊啊
-----------------------------------------------------------------------------------------------------------
栗子2,这次实现一个ps -f的功能: