进程控制二之进程替换

原理

通过进程PCB当中内存指针,找到进程虚拟地址空间当中的数据段和代码段,通过页表映射将数据段和代码段映射到新程序的物理内存,即使用新的程序将之前进程的数据段和代码段进行更新。

常用的用法:一般情况下,都会先创建出来一个子进程,然后对子进程进行 进程程序替换

父进程(守护进程):判断子进程是否工作正常

  • 正常:不用关心+轮询判断
  • 不正常:子进程退出了,卡死了,父进程重新一个子进程

子进程(工作进程):

  • 执行业务逻辑,为客户进行服务

exec函数簇

这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回。
如果调用出错则返回-1
 

函数:

int execl(const char *path,const char* arg , ...)

path:带路径的可执行程序

arg:给可执行程序传递的参数

...... :可变参数列表,以NULL结尾

返回值: 只有失败的时候,才有返回值,返回值为-1

成功了,不会返回

int execlp(const char* file,const char *arg, ...)

file:可执行程序的名称,(一定需要注意当前程序是否在环境变量PATH当中可以被找到)

arg :给可执行程序传递的参数,(第一个参数是可执行程序的名称)

... :可变参数列表,以NULL结尾

如果exec函数的名称中带有p,会搜索环境变量,并且带p的第一个参数传入可执行程序的名称,不带p的传入带路径的可执行程序

int execle(const char* path,const char* arg, ... ,char* const envp[])

path :带路径的可执行程序

arg:可执行程序参数,以NULL结尾

envp :自己组织环境变量,如果不传入环境变量则认为当前进程没有环境变量

带e和不带e的区别:如果不带,则不需要组织环境变量。如果带e,则需要自己组织环境变量

int execv(const char*path,char *const argv[])

path:带路径的可执行程序

定参的函数,argv :要给可执行程序传递的参数,第一个参数是该程序的名称,以NULL结尾

int execvp(const char* file,char * const argv[])

file :可执行程序的名称,同时这个可执行程序要能在PATH环境变量当中找到,否则程序替换就失败;同时也可以传递一个带有路径的可执行程序

int exeve(const char* filename,char *const argv[], char *const envp[])

filename:可执行程序的名称

argv: 定参的函数 要给可执行程序传递的参数,第一个参数是该程序的名称,以NULL结尾

envp :自己组织环境变量,如果不传入环境变量则认为当前进程没有环境变量

l:给替换程序传递的参数是使用可变参数列表进行传递的

v:给替换程序传递的参数是使用字符指针数组进行传递的

 

发布了52 篇原创文章 · 获赞 6 · 访问量 1352

猜你喜欢

转载自blog.csdn.net/weixin_43519514/article/details/105202503