进程空间回收和线程

一.进程空间的回收

1.wait

pid_t wait(int *status);

功能:该函数可用于阻塞等待任意子进程退出并回收进程的状态

参数:status进程退出时候的状态

           如果不关心其退出状态一般用NULL表示

           如果要回收进程退出状态,WEXITATUS回收

返回值:成功回收子进程pid 失败-1

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

        子进程:exit(退出状态值)   退出状态值只有最低8位有效数字

        父进程:wait (&status)

                        获取到退出状态值 ,WIFEXITED //先判断是否正常退出

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

 

2. waitpid

pid_t waitpid(pid_t pid, int *status, int options);

功能:等待子进程状态发生变化

参数:pid >0 表示等待指定的子进程状态发生改变

           wstatus:表示获得取到子进程状态信息

           options :选项  可以不是阻塞(WNOHANG) 默认是阻塞0

注:如果pid = -1 表示waitpid会等待任何子进程

       非阻塞调用: waitpid(-1,status,0)=wait(status)

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

2)父进程会去查看子进程状态变化

如果未发生变化,父进程不阻塞整个程序继续向下

非阻塞必须在循环里使用

二.线程

1.什么是线程

线程---轻量级的进程

进程---重量级的进程

2.为什么需要线程

进程的产生---fork

进程是分配资源和调度执行的基本单位。 
进程是程序执行和资源管理的最小单位。


3.线程的组成

线性tid // thread   程序计数器   寄存器集合   栈

4.线程与进程的关系

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

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

3)线程结束不一定导致进程结束‘

5.线性的编程

a.创建

 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                                void *(*start_routine) (void *), void *arg);
 

 

功能:该函数可以创建指定的一个线程。
参数:
          thread 线程id,需要实现定义并由该函数返回。
          attr   线程属性,一般是NULL,表示默认属性。(可结合性+分离属性)
          start_routine 
                指向指针函数的函数指针。
                本质上是一个函数的名称即可。
                称为线性回调函数,是线程的执行空间。
          arg  回调函数的参数,即参数3的指针函数参数。

返回值:成功 0  失败 错误码

注:1.编译时加-lpthread

        2.判断返回值时自己定义error

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

            其他的线程---子线程

            各个线程之间地位平等

b.执行   就体现在线程的执行函数(回调函数)

c.退出

void pthread_exit(void *retval);

功能:子线程自行退出
参数: retval 线程退出时候的返回状态。

注:pthread_exit 本身表示结束线程

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

        主线程结束并不表示进程,此时进程会在其余线程结束后结束

d. 资源回收

int pthread_cancel(pthread_t thread);
功能:请求结束一个线程
参数:thread 请求结束一个线程tid
返回值:成功 0,失败 -1;
注:线程退出时,可以带出退出的状态值,但是传的是退出状态值对应的空间的地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值