进程程序替换并没有创建新的进程
怎么样才算是新建了一个进程?
创建好task_struct,再把task_struct插到双向链表里面,这才是创建好了一个进程。
所谓的进程程序替换就是把物理内存上的数据和代码替换成了另外一个磁盘上的可执行文件的数据和代码,说白了,我们前面写的一些程序都是把它编译成一个可执行程序,一个可执行文件,而这个可执行文件非得是通过“./文件名”的方式才能把它运行起来,这样一个运行的过程其实就是由操作系统把这个文件里面包含的数据和代码加载到内存中的过程,进程程序替换它的这个替换和运行一个程序它的一个加载过程是非常类似的,意思是我们本来就有一个进程,然后这样一个进程它有自己的代码和数据,但是我想借助这个进程能够去执行另外一个可执行文件中的代码,就可以通过程序替换的方式来完成这一项操作。
所以说,进程程序替换是将原有进程的代码和数据替换成新的可执行程序的代码和数据。
exec函数族头文件都是unistd.h
如果调用成功则加载新的程序从启动代码开始执行,不再返回;如果调用出错则返回 -1。
1、execl(l指list,可变参数列表)
int execl(const char *path, const char *arg, …);
其中,参数1表示路径,就是你要替换的那个可执行程序的那个可执行文件它的路径是什么;
后面是一个变长参数列表,表示你要替换的那个可执行程序在启动的时候要加上哪些的命令行参数。
由于行参数到底有几个这个不确定,所以通过变长参数列表的形式来提供给我们用户使用。
2、execlp(p表示的含义叫做环境变量PATH,表示PATH这个环境变量),p特指环境变量中的PATH,只是环境变量中的一个。
int execlp(const