c语言中的僵尸太及wait的作用

来源:互联网 发布:对日软件开发招聘 编辑:程序博客网 时间:2024/05/12 11:41
僵尸态进程:   
   子进程结束啦,按时没有父进程收尸!

创建一个僵尸态的子进程:

收尸---wait(NULL); //关心子进程的退出,进行子进程的收尸操作


僵尸态的进程中:
 父进程是存在的,只是没有做收尸操作而已!
 但是此时子进程已经结束!

根据上述特点,创建一个僵尸态的子进程,通过 ps aux | grep a.out
查看僵尸态子进程
ubuntu    3909  0.0  0.0   1992   280 pts/1    S+   19:35   0:00 ./a.out
                                               --
                                                Z
[1].进程的生命周期
  (a).进程的创建 -- fork
  (b).进程的执行 -- a.子进程中实现处理逻辑 b.调用exec函数族 实现 运行新程序
  (c).进程的结束 -- exit _exit (return main)
      两种进程状态
      1).孤儿进程
         特点:
            父进程结束了,但是子进程还存在,此时子进程被init进程收养
      2).僵尸进程
         特点:
            子进程结束了,但是父进程还存在,并且父进程没有做任何收尸操作,导致子进程成为僵尸态的进程

         收尸: 回收资源
            僵尸态的进程占用哪些资源?
             [1].pcb 进程占用的内存
                 pcb 描述了进程 信息的
                 僵尸态进程是进程本身已经结束了但是对应的pcb还没有释放
             "我是我" ---->"销户"
wait 函数:
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);

进程的状态改变:
(1),子进程结束
(2).子进程被暂停
(3).子进程被重新恢复

wait 函数: 是一个阻塞的方式 会导致 调用进程 阻塞 ,直到 调用进程的子进程结束
waitpid();
@options
  WNOHANG   //no hang   非阻塞的方式 等待子进程结束
  WUNTRACED //R --> T   子进程从 运行态 到 T(stop)的状态的改变
  WCONTINUED//T --> R   子进程被恢复的状态改变

@status   非NULL 则获取进程的退出状态信息

          exit();




0 0
原创粉丝点击