嵌入式day27

进程退出:

wait //阻塞方式---调用进程 一般不做额外的事情

waitpid //非阻塞方式---调用进程 逻辑一般不受影响(必须套在循环中)

wait

1、获取子进程退出状态

2、回收资源(会让僵尸态的子进程销毁)

整型指针:被调修改主调

注:

1、wait的本身是一个阻塞操作会使调用者阻塞

2、父进程要获得子进程的退出状态

子进程:

exit(退出状态)

退出状态值 只有最低8位有效(0-255)

父进程:

wait(&status)

获取到退出状态值

WIFEXITED() //先判断是否为正常退出

WEXITSTATUS() //获取到exit传递的退出状态值

WIFSIGNALED()//异常退出

WTERMISIG()//

waitpid

等待子进程状态发生变化

参数:

pid

pid = -1 // 表示等待所有子进程状态改变

pid > 0 //表式等待 指定的子进程状态改变

wststus //表示获取到的子进程的状态信息

options //选项 可以不阻塞(WNOHANG // hang on) 默认是阻塞(0)

非阻塞调用:

非阻塞和阻塞

1、阻塞 会影响父进程处理逻辑

2、非阻塞 父进程会去查看子进程状态改变,但是如果没有发生改变,父进程不会阻塞,程序继续往下

非阻塞必须套在循环中处理 //轮询

多任务的技术:线程

线程

概念:

线程 --- 轻量级的进程(light weight)

为什么需要:

进程的产生 --- fork

线程 --- 轻量级的进程

进程 --- 重量级的进程

线程 成为 CPU执行的最小单位

进程 成为 资源分配的基本单位

线程 创建和调度 时空开销都比进程小

组成:

线程tid //thread

程序计数器

寄存器集合

线程与进程的关系:

1、线程是存在于进程中的

2、线程共享了进程的资源(代码段 ,数据段,打开一些文件)

3、线程结束,不一定导致进程结束

线程的编程:

类似于进程过程:

线程函数 NPTL

创建,执行,退出,资源回收

pthread_create

创建一个指定的线程

参数:

thread 线程id,需要实现定义并由该函数返回

attr 线程属性,一般是NULL,表示默认属性(可结合性+分离属性)

默认(可结合性)--- 自己手动回收

分离属性 --- 系统自动回收

start_routine --- 线程执行函数(线程回调函数)(线程回调函数 --- 完成线程任务功能的函数 需要调用者自己实现)

指向指针函数的函数指针

本质上是一个函数的名称即可

arg 回调函数的参数,即参数3的指针函数参数

返回值:

成功 返回0

错误 返回出错码(随机数)

编译时需要加 -lpthread

注:

主函数所在的执行流 --- 主线程

其他的线程 --- 子线程(次线程)

各个线程间地位是平等的 //对等

获得线程的tid:

pthread_self(); //在哪个线程调用就获得哪个线程的tid

pthread_exit

结束调用的线程

参数:

retval //退出状态值(地址)

注意:

1、pthread_exit 本身表示结束线程

如果用在main函数中 表示主线程结束

主线程结束 不代表进程结束

此时,主线程执行流结束,进程会在其余线程都结束后结束

pthread_join

等待线程结束

参数:

thread 线程tid

retval 用来保存退出状态值所在空间的地址

返回值:

成功 0

失败 错误码

注:

线程退出时,可以带出退出状态值,但是传的是,退出状态值的地址

---------------------------

嵌入式学习第二十七天,今天讲了关于进程结束后退出时父进程对子进程的资源回收,有两个函数可以实现,其中waitpid可以使父进程非阻塞。之后还学习了多任务技术,线程的知识。线程是轻量级的进程,还学习了关于线程的一些函数,线程的创建,运行,结束和等待结束。后面继续加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值