进程等待


怎样在内核中创建一个结构体:struct task_struct{………}
parent task;            
task_struct*task=(task_struct*)malloc(sizeof(task_struct));
memcpy(task,parent task);-------memcpy(内存拷贝)

进程终止:   进程退出
           退出场景:正常退出(结果符合预期),异常退出
进度条程序:printf将数据写入到标准输出文件中,并没有直接写入文件,而是先写入到缓冲区当中,当刷新缓冲区时,数据才会被写入到文件中。
           刷新缓冲区的方式:1/n
                          2)  程序退出时刷新缓冲区
           如何退出:1)只有main 函数中return ,其他函数中return只是退出函数,不会退出进程 ; //退出前刷新缓冲区
                   2void exit这是一个库函数;//任意位置都是退出进程,退出前刷新缓冲区
                      void_exit这是一个系统调用接口  ;//不会刷新缓冲区,缓冲区的数据被丢弃,直接退出,即不会打印(加上\n就可以打印)
                   3return -1这种退出方式会释放所有资源(包含共用的虚拟地址空间),所以在vfork退出中不能用
                            
库函数和系统调用接口的关系:上下级的封装调用关系

进程等待:等待子进程的状态改变(等待子进程的退出)------获取子进程的退出返回值,避免子进程成为僵尸进程;
                 
为什么要等待子进程的退出:因为子进程退出时,为了保存退出原因,因此操作系统不能释放子进程全部资源,因此通知父进程 获取子进程退出返回值 ,允许释放资源,但是操作系统的通知没有使父进程关注到子进程的退出,因此子进程成为僵尸进程。若父进程获取了子进程的返回值,僵尸子进程将没有存在的意义,就会被释放资源
因为不知道何时退出,因此只能创建之后一直等着子进程的退出。
wait/waitpid都是默认的阻塞函数

              阻塞:为了完成一个功能发起系统调用,当前若不具备完成条件,等待直到条件具备完成功能后返回;
              非阻塞:为了完成一个功能发起系统调用,当前若不具备完成条件,则立即报错返回;
                                                       
          如何等待:pid_t wait(int *status)// 等待任意一个子进程的退出
                  pid_t waitpid(int pid,int* status,int option)//  不仅可以等待任意一个子进程的退出,也可以等待指定的子进程的退出,
                                                                                              //并且可以设置为非阻塞
pid =-1----等待任意一个子进程; pid>0-----等待指定的子进程
 status---将返回值放到该参数中
 option----选项标志--WNOHANG--将waitpid设置为非阻塞
                  -- 0---默认为阻塞
wait接口功能是一直等待任意一个子进程退出,子进程退出后,获取到返回值,放到传入的参数statu中
               如果没有子进程退出,wait函数将一直阻塞;
waitpid可以等待指定的一个子进程退出,并且可以设置为非阻塞
               

  statu32位中,高16位没有使用,其中低16位中,高八位存储子进程退出返回值,
                                       低八位中的高一位中存储core dump标志。低七位中存储异常退出信号值                                                 
                                               低七位中的存储异常退出信号值若为0,表示没有异常信号,则表示程序正常退出,否则表示程序异常退出,返回值将不具有判断意义
  core dump(核心转储----程序异常退出时保存程序的运行信息,便于事后调试,默认关闭)。
                                                                                                             
获取低七位:statu & 0x7f
获取低十六位中的高八位 :(statu>>8)&0xff

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

记得多喝热水…

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

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

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

打赏作者

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

抵扣说明:

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

余额充值