栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2.7进程退出、孤儿进程、僵尸进程

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2.7进程退出、孤儿进程、僵尸进程

1.进程退出

上面是标准c库函数

下面是linux库函数

#include
#include
#include

int main(){
    printf("hellon");
    printf("world");//在缓冲区里系统_exit没有刷新缓冲区所以没有显示
    
    //exit(0); //系统退出前会刷新缓冲区
    _exit(0);
    return 0;
}

 

 2.孤儿进程

 孤儿进程会被分配给进程号为1的进程回收资源

#include 
#include 
#include 
int main(){
    //创建子进程
    pid_t pid = fork();

    //判断是父进程还是子进程
    if(pid > 0){
        printf("i am parent process,pid : %d, ppid : %dn",getpid(),getppid());
    }
    else if(pid==0){
        sleep(1);
        printf("i am child process, pid : %d, ppid : %dn",getpid(),getppid());
    }
    for(int i=0;i<3;i++){
        printf("i : %d , pid : %d n",i,getpid());
    }
    return 0;
}

 3.僵尸进程

 产生原因:父进程不回收已经结束的子进程资源,子进程自己只能释放用户区数据,内核区数据必须由父进程释放

避免:父进程必须释放子进程资源

解决方法:wait()函数或者waitpid()函数 或者在控制端直接kill -9 杀死父进程(注意这种方式杀死僵尸进程无效!!!)

#include 
#include 
#include 
int main(){
    //创建子进程
    pid_t pid = fork();

    //判断是父进程还是子进程
    if(pid > 0){
        while(1)
        {
            printf("i am parent process,pid : %d, ppid : %dn",getpid(),getppid());
            sleep(1);
        }
    }
    else if(pid==0){
        printf("i am child process, pid : %d, ppid : %dn",getpid(),getppid());
    }
    for(int i=0;i<3;i++){
        printf("i : %d , pid : %d n",i,getpid());
    }
    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/836679.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号