进程(父进程、子进程、init进程)
父进程和子进程、init进程之间的关系
通过上节我们知道,子进程是通过fork()函数创建的,相当于父进程的一个复制品,子进程和父进程除了子进程复制了父进程还有什么关系呢?
1.子进程和父进程属于同一进程组,父进程为进程组组长;
2.父进程退出子进程未退出的情况下,子进程会变成孤儿进程有init进程收养并转为后台进程;
3.子进程退出父进程为退出但父进程未及时进行回收,子进程就会成为僵尸进程;
用通俗的方式来讲:子进程和父进程就如同一家公司开了一家子公司一样,虽然在表面上看两家公司是两个独立的公司,但实际内部子公司是完全复制的父公司,但如果父公司倒闭子公司运行那么他就是一个完全独立直接由国家统一进行管理了(这块不太贴切),如果子公司倒闭但父公司运行但对于子公司倒闭没有及时处理,那么倒闭的子公司就会生一个空壳在那。
用程序来看一下父子进程之间的关系
子进程和父进程属于同一进程组,父进程为进程组组长
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>int main(){pid_t pid;pid = fork();if(pid < 0){perror("fork");return 0;}else if(pid == 0){printf("chile pid %d ppid %d pgid %d\n",getpid(),getppid(),getpgid(getpid()));while(1);}else{printf("pareent pid %d pgid %d\n",getpid(),getpgid(getpid()));while(1);}
}
执行结果
ubuntu-14-zs@ubuntu:~/1024/pid$ ./pid_test2
pareent pid 6197 pgid 6197
chile pid 6198 ppid 6197 pgid 6197
由执行结果可见子进程和父进程自同一个进程组里,父进程为
进程组组长。
父进程退出子进程未退出的情况下,子进程会变成孤儿进程有init进程收养并转为后台进程
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>int main(){pid_t pid;pid = fork();if(pid < 0){perror("fork");return 0;}else if(pid == 0){printf("chile pid %d ppid %d pgid %d\n",getpid(),getppid(),getpgid(getpid()));while(1);}else{printf("pareent pid %d pgid %d\n",getpid(),getpgid(getpid()));//while(1);sleep(5);exit(0);}
}
运行结果
经过5秒父进程退出后
子进程转为后台进程
那么子进程是不是被init收养了呢?
通过ps命令我们可以发现子进程6309的ppid由6308变成了1985
而pid1985正式init进程
子进程退出父进程为退出但父进程未及时进行回收,子进程就会成为僵尸进程
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>int main(){pid_t pid;pid = fork();if(pid < 0){perror("fork");return 0;}else if(pid == 0){printf("chile pid %d ppid %d pgid %d\n",getpid(),getppid(),getpgid(getpid()));//while(1);exit(0);}else{printf("pareent pid %d pgid %d\n",getpid(),getpgid(getpid()));while(1);}
}
运行结果
由执行结果可见子进程pid 6345 变成了僵尸进程;
进程(父进程、子进程、init进程)相关推荐
- Android 10.0系统启动之init进程-[Android取经之路]
摘要:init进程是linux系统中用户空间的第一个进程,进程号为1.当bootloader启动后,启动kernel,kernel启动完后,在用户空间启动init进程,再通过init进程,来读取ini ...
- linux进程--init进程(九)
Linux下有3个特殊的进程,idle进程(),init进程()和kthreadd() idle进程由系统自动创建, 运行在内核态 idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个 ...
- Linux下1号进程的前世(kernel_init)今生(init进程)----Linux进程的管理与调度
Linux下有3个特殊的进程,idle进程(PID=0PID=0), init进程(PID=1PID=1)和kthreadd(PID=2PID=2) * idle进程由系统自动创建, 运行在内核态 i ...
- OpenHarmony恢复启动子系统init进程之服务管理与发布
配置文件加载 Jobs 实际上是作为参数使用,作为trigger参数使用. 使用HashMap管理,所有结点按类型存储,通过name获取. 文件 加载类型 说明 /etc/init.cfg Jobs, ...
- Android系统启动流程—— init进程zygote进程SystemServer进程启动流程
原文地址:https://blog.csdn.net/qq_30993595/article/details/82714409 Android系统启动流程 Android系统启动过程往细了说可以分为5 ...
- 从源码解析-Android系统启动流程概述 init进程zygote进程SystemServer进程启动流程
Android系统启动流程 启动流程 Loader Kernel Native Framework Application init进程 启动 rc文件规则 Actions Commands Serv ...
- Android源码阅读---init进程
Android源码阅读-init进程 文章目录 Android源码阅读---init进程 1. 编译命令和进程入口 1. init 进程编译命令 2. main函数流程 2. 主函数处理流程 1. 创 ...
- Linux的init进程(内核态到用户态的变化)
init进程,也就是内核启动3个进程中的进程1: init进程完成了从内核态向用户态的转变: (1)init进程是比较特殊,一个进程两个状态,init刚开始运行时是内核态,他属于内核线程,然后他自己运 ...
- linux的 0号进程(idle进程) 和 1 号进程(init进程)
Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2) idle进程由系统自动创建, 运行在内核态 idle进程其pid=0 ...
- init进程(即进程1,或者说linuxrc)的详解
以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 一.init进程详解1 1.init进程完成了从内核态向用户态的转变 (1)一个进程先后两种状态 init进程刚开始运行的时候是内核态,它属 ...
最新文章
- OVS搭建虚拟机全过程(四十五)
- 速卖通运营之如何提升商品动销率
- 990. Satisfiability of Equality Equations
- Spring Security 基本介绍,初窥路径
- Redis 主从复制(replication)
- matlab 电路频率响应_学习电子电路有什么仿真软件?有哪些优缺点?
- PowerTip of the Day from powershell.com上周汇总(六)
- Java编写代理服务器(Burp拦截Demo)一
- 再提“鸿蒙”,任正非说这是为物联网而生;硅谷公司年薪报告出炉,谷歌年薪居榜首;苹果CEO库克接班人浮出水面,苹果高层或大换血?...
- 部署thinkphp5框架的php,三、部署ThinkPHP5框架
- win8计算机配置怎么看,win8怎么看电脑配置?win8电脑配置的查看方法
- libpng 处理png图片
- SENSOR DVP接口介绍
- C++ primer 5th 习题之10.13
- 用Python实现一个电影订票系统
- matlab 短时能量计算+源代码
- TTL与CMOS电路小结
- 爬虫国际统计局省市区
- 「Deep Learning」读书分享系列
- 开发艺术探索阅读笔记—01