Linux--进程等待与替换

31 篇文章 0 订阅

1. 进程等待

  • 父进程等待子进程退出,获取退出子进程返回值,释放退出子进程资源。
    · 避免产生僵尸进程。
    · wait/waitpid :只要有已经退出的子进程,则会直接处理,不需要等待。
    · 头文件 #include <sys/wait.h>
  • pid_t wait(int *status);
    · 默认是阻塞接口
    · 等待任意一个子进程退出,通过status获取退出返回值,释放资源。返回值–成功返回退出子进程的pid,错误返回-1.
  • pid_t waitpid(pid_t pid, int *status, int options);
    · 默认是阻塞接口
    · 等待任意一个子进程退出,也可以等待指定的子进程退出;可以阻塞等待子进程退出,也可以非阻塞等待子进程退出。
    · pid:-1等待任意子进程;大于0等待指定子进程
  • waitpid – 返回值:使用低16位,其中高8位返回值,低7位异常退出信号;
    · WIFEXITED(status) – 判断;WEXITSTATUS(status) – 获取。
    · 成功返回值大于0,没有子进程退出返回0,
  • options:0 - 默认阻塞;WNOHANG - 非阻塞
    · 阻塞:为了完成一个功能,发起一个调用,若功能完成条件不具备,一直等待
    · 非阻塞:为了完成一个功能,发起一个调用,若功能完成条件不具备,立即报错返回

在这里插入图片描述
在这里插入图片描述

2. 程序替换

  • 替换一个进程正在调度运行的程序
    · 加载一个新的程序到内存中,更新当前进程的页表映射信息到新的程序上。
  • exec函数族:5个库函数+系统调用接口
    · 三类参数:新的程序路径名称;程序运行参数;自己设定环境变量。

  • execl和execv的区别:程序运行参数的不同设置方式。
    · execl("/bin/ls","ls","-a","-l",NULL);
    · char* argv[]={"ls","-a","-l",NULL}; execv("/bin/ls",argv);

  • execl和execlp的区别:新的程序是否需要带路径,指定程序所在位置
    · execl("/bin/ls",...);
    · execlp("ls",...); --原因:会到PATH环境变量指定的路径下去找对应程序

  • execl和execle的区别:当前进程的环境变量是否由自己来设置
    · execl("/bin/ls",...) --使用默认当前就有的环境变量
    · char *env[] = {"MYVAL=100",NULL}; execle("/bin/ls")

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值