zoukankan      html  css  js  c++  java
  • [编程] C语言Linux系统编程-等待终止的子进程(僵死进程)

    1.等待终止的子进程(僵死进程):

    如果一个子进程在父进程之前结束,内核会把子进程设置为一个特殊的状态,处于这种状态的进程称为僵死进程

    当父进程获取了子进程的信息后,子进程才会消失。

    pid_t wait(int *status);

    父进程调用这个方法会被阻塞住,如果子进程终止的时候,此方法会调用并且返回终止子进程的pid

    #include <stdio.h>
    #include <unistd.h>
    #include <sys/wait.h>
    int main(){
            int pid,ppid;
    
            int ret=fork();
            if(ret>0){
                    pid=getpid();
                    ppid=getppid();
                    printf("我是父进程,pid=%d , ppid=%d ,我新建的子进程pid=%d
    ",pid,ppid,ret);
                    int status;
                    int sonPid=wait(&status);
                    printf("我的子进程,pid=%d,终止了
    ",sonPid);
            }else if(ret==0){
                    sleep(2);
                    pid=getpid();
                    ppid=getppid();
                    printf("我是子进程,pid=%d , ppid=%d 
    ",pid,ppid);
            }else if(ret==-1){
                    perror("fork");
            }   
    }

    输出:

    我是父进程,pid=22315 , ppid=12479 ,我新建的子进程pid=22316

    我是子进程,pid=22316 , ppid=22315

    我的子进程,pid=22316,终止了

    2.如果父进程在子进程之前终止了,那么系统会把子进程设置给init进程(pid1),init进程会周期性的等待所有的子进程,确保没有长时间的僵死进程

  • 相关阅读:
    HTTPS证书撤销
    前端跨域问题解析
    js递归遍历key
    阿里云centos配置nginx和nodejs
    Linux 查看服务器配置
    解决IPOD NANO7无法开机
    GIF添加3D加速
    关于bootstrap Modal弹窗 滚动条的问题
    Just-In-Time Debugging in Visual Studio 禁止VS在服务器上调试
    利用ASP.NET操作IIS (可以制作安装程序)
  • 原文地址:https://www.cnblogs.com/taoshihan/p/8001516.html
Copyright © 2011-2022 走看看