Linux-进程等待的非阻塞模式-进程程序替换-minishell

1. 进程等待的非阻塞模式

1.1 非阻塞模式

1.WNONHANG
2.搭配循环使用
  循环判断条件:waitpid函数的返回值
    0:表示没有等到
    子进程的PID:表示等到了

2. 进程程序替换

2.1 作用

  将正在运行的进程,替换成为另外一个程序,运行另外一个程序的代码。
在这里插入图片描述

2.2 原理

  进程程序替换就是将进程的代码段,数据段替换成为新的程序的代码段和数据段,更新堆栈信息。

2.3 应用场景

2.3.1 守护进程

在这里插入图片描述
  守护进程本质上是为了提供7*24小时的服务,服务不间断,但是,当子进程由于代码崩溃退出之后,虽然父进程会立即重新启动一个子进程,让子进程进行程序替换,这块我们需要注意,导致子进程退出的原因是崩溃,而崩溃的代码并没有修复。

2.3.2 bash(命令行解释器)

2.4 接口

2.4.1 exec函数簇

1.int execl(const char *path,const char * arg,…);
  path:带路径的可执行程序(路径+可执行程序名称)
  arg:给待要替换的可执行程序传递参数
规定:
  1.第一个参数是可执行程序本身
  2.多个可执行参数,使用‘,’进行间隔
  3.参数的最后需要以NULL结尾
  …:可变参数列表
返回值:
  替换成功之后,该函数是没有返回值,也不知道返回值给谁,进程的PID和替换之前进程的PID一样,只有替换失败之后,才会有返回值,返回值小于0。

2.int execlp(const char *file, const char *arg,…);
参数:
  file:只需要传递待替换的可执行程序
注意:
  1.如果只传递可执行程序的名称,则该可执行程序一定要在环境变量PATH当中可以找到。
  2.也可以将待替换的可执行程序的路径写全
  arg:同execl
  函数名带有‘p’,则表示当前函数会自动搜索环境变量PATH

3.int execle(const char path, const char * arg, …, char * const envp[]);
  path:带有路径的可执行程序
  arg:同execl
  envp[]:指针数组,本质上是数组,数组的每个元素都是一个
char
,程序员需要自己组织环境变量,放到envp[]数组当中,最后一个元素需要放入NULL。

  函数名称带有‘e’:则表示当前的execl函数,需要自己组织环境变量,放到envp指针数组当中,以NULL结尾。

  函数名带有‘l’:表示给待替换的可执行程序,传递的命令行参数为可变参数列表。

4.int execv(const char *path,char *const argv[]);
  path:带有路径的可执行程序
  argv[]:指针数组
  命令行参数的数组,存放的是传递给可执行程序的命令行参数
规则:
1.第一个参数是可执行程序本身
2.参数的最后需要以NULL结尾

  函数名当中带有‘v’:表示给待替换的可执行程序传递的命令行参数为指针数组
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);

验证方式:
  1.直接替换命令程序
  2.替换自己写的程序
    2.1验证PID是否变哈
    2.2验证环境变量

在这里插入图片描述

3. minishell

  1.创建子进程
  2.父进程需要进行进程等待
  3.子进程进行进程程序替换成为命令程序
考虑:
  父进程需要进行循环
  子进程
  ls -a -l
  区分命令程序和命令行参数
  进程程序替换
  execvp

在这里插入图片描述

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天津 唐秙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值