UNIX环境高级编程--9. 进程控制
进程关系
当子进程终止时,父进程得到通知并能取得子进程的退出状态。
终端登录:
早起UNIX系统通过哑终端登录,本地的终端 or 远程的终端 。主机上链接的终端设备是固定的,所以同时登录数也就有了已知的上限。直到出现了映射图形终端的出现,
开发出了窗口系统,它向用户提供了与主机系统进行交互的新方式。(通过shell)
Linux系统启动过程详解(参考:butbueatiful.blog.chinaunix.net):
第一步:加载BIOS
当打开计算机电源后,首先会加载BIOS,BIOS里面存储的信息太重要了,计算机的必须的硬件信息都存在里面,比如:CPU相关信息、
设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在完成了第一步之后,计算机就知道接下来该去where找who了。
第二步:读取MBR
MBR(Master Boot Record)主引导记录。存放在第0磁道 第一个扇区,大小512字节。里面存放了预启动信息、分区表信息,
将BIOS指定的硬盘的MBR内容复制到内存中。成为:Boot Loader(grub)。
第三步:Boot Loader
Boot Loader就是在操作系统内核运行之前运行的一段小程序。通过这段程序,初始化硬件设备,建立内存空间的映射图,
为最终调用系统内核做好准备。
第四步:加载内核
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压操作,系统这时会提示“Uncompressing Linux”。当解压完成
后,屏幕输出“OK。booting the kernel”。
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列初始化设备,完成Linux核心环境的建立。至此,内核已经建立起来
基于linux的程序可以运行了。
第五步:用户层init依据inittab文件来设定运行等级
内核被加载后,第一个运行的程序是/sbin/init ,该文件会读取/etc/inittab文件,并依据次文件初始。
/etc/inittab文件最主要的作用是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。
Linux的运行等级设定如下:
0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启
第六步:init进程执行rc.sysinit
在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、
设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。
第七步:启动内核模块
具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
第八步:执行不同运行级别的脚本程序
根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
第九步:执行/etc/rc.d/rc.local
你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don’t
# want to do the full Sys V style init stuff.
rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。
第十步:执行/bin/login程序,进入登录状态
会话:
会话(session)是一个或多个进程组的集合。
用户可以在前台或后台启动一个作业。一个作业只是几个进程的集合,通常是一个进程管道。例如:
vi main.c /* 在前台启动了只有一个进程组成的作业 */
pr *.c | ipr &
make all & /* 在后台启动了两个作业 这两个作业调用的所有进程都在后台运行*/
控制终端:
一个会话可以有一个控制终端。通常是终端设备或伪终端(在网络登录情况下)。
建立与控制终端链接的会话首进程被成为控制进程。
作业控制:
允许在一个终端上启动多个作业(进程组),它控制哪一个作业可以访问该终端以及哪些作业在后台运行。当然还需要内核的一些对作业控制的支持。
shell执行程序:
孤儿进程组:
一个其父进程已终止的进程成为孤儿进程(orphan process),这种进程由init进程“收养”。
整个进程组也有可能成为孤儿。
一个进程组中的每个进程的父进程都是其他会话中的进程,那么该进程组叫做孤儿进程组。
每天学一点linux命令:
ps -o pid, ppid, pgid, sid, comm
ps:进程查看命令。 -o : 按照用户定义的格式显示。
ppid:父进程id pgid:组ID sid:会话ID comm:指令
管道命令: ps -o pid, ppid, pgid, sid, comm | cat
将前面命令的输出作为后面cat命令的输入
UNIX环境高级编程--9. 进程控制的更多相关文章
- Unix环境高级编程(六)进程控制
本章介绍Unix的进程控制,包括进程创建,执行程序和进程终止,进程的属性,exec函数系列,system函数,进程会计机制. 1.进程标识符 每一个进程都有一个非负整数标识的唯一进程ID.ID为0表示 ...
- UNIX环境高级编程--8. 进程控制
进程控制进程标识: 每一个进程都有一个非负整型表示的唯一进程ID.虽然唯一,但是ID可以复用.当一个进程结束后,其进程ID会被延迟复用. ID=0的进程通常是调度进程,常被称作交换进程(s ...
- Unix环境高级编程——守护进程记录总结(从基础到实现)
一.概念及其特征 守护进程是系统中生存期较长的一种进程,常常在系统引导装入时启动,在系统关闭时终止,没有控制终端,在后台运行.守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程 ...
- Unix环境高级编程(八)进程关系
本章看后给人似懂非懂的感觉,主要是不知道实际当中如何去使用.通过前面几章的学习,每个进程都有一个父进程,当子进程终止时,父进程得到通知并取得子进程的退出状态.先将本章基本的知识点总结如下,日后再看时候 ...
- Unix环境高级编程(五)进程环境
本章主要介绍了Unix进程环境,包含main函数是如何被调用的,命令行参数如何传递,存储方式布局,分配存储空间,环境变量,进程终止方法,全局跳转longjmp和setjmp函数及进程的资源限制. ma ...
- UNIX环境高级编程——Linux进程地址空间和虚拟内存
一.虚拟内存 分段机制:即分成代码段,数据段,堆栈段.每个内存段都与一个特权级相关联,即0~3,0具有最高特权级(内核),3则是最低特权级(用户),每当程序试图访问(权限又分为可读.可写和可执行)一个 ...
- UNIX环境高级编程——守护进程列表
amd:自动安装NFS(网络文件系统)守侯进程apmd:高级电源治理Arpwatch:记录日志并构建一个在LAN接口上看到的以太网地址和ip地址对数据库Autofs:自动安装治理进程automount ...
- UNIX环境高级编程——守护进程
一.守护进程简介 守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系 ...
- (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
随机推荐
- BZOJ 3747 洛谷 3582 [POI2015]Kinoman
[题解] 扫描线+线段树. 我们记第i部电影上次出现的位置是$pre[i]$,我们从$1$到$n$扫描,每次区间$(pre[i],i]$加上第i部电影的贡献$w[f[i]]$,区间$[pre[pre[ ...
- FJoi2017 1月20日模拟赛 恐狼后卫(口糊动规)
Problem 1 恐狼后卫(wolf.cpp/c/pas) [题目描述] 著名卡牌游戏<石炉传说>中有一张随从牌:恐狼后卫.恐狼后卫的能力是使得相邻随从的攻击力提高. 现在有n张恐狼后卫 ...
- redis学习-简介
1. Redis 简介 1.1 Redis是什么 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统.Red ...
- App后台开发运维和架构实践学习总结(4)——APP的注册和登录功能设计
一.为什么需要注册和登录? 是否需要注册和登录的关键取决于产品形态. 如果用户注册登录对于用户需求.产品功能.商业模式本身带不来任何价值的话,就没必要设计这样的功能.比如一些实用工具类的产品:计算器. ...
- UVA 12686 Trending Topic
Trending Topic Time limit: 1.000 seconds Imagine you are in the hiring process for a company whose p ...
- HDU 3308 (线段树区间合并)
http://acm.hdu.edu.cn/showproblem.php?pid=3308 题意: 两个操作 : 1 修改 单点 a 处的值. 2 求出 区间[a,b]内的最长上升子序列. 做法 ...
- hdu 1269 求连通图的模板题
#include<stdio.h> #include<string.h> #include<iostream>//只存在一个连通分量 #include<str ...
- 分享一个灰常好的 dapper 扩展插件: Rainbow
dapper 是一个效率非常高的orm 框架 ,效率要远远大于 我们大微软的EF . 它只有一个类文件,非常之小.(在 EF 5.0 后 微软已经做了 改进) ps; 由于之前我也没测试过,只 ...
- Java发送带附件的QQ邮箱
由于腾讯公司给QQ邮箱增加了一个授权码的密码保护,导致之前网上很多代码都不能用,于是就自己敲了一份demo. 注意在密码那里可能需要授权码,具体设置:http://service.mail.qq.co ...
- Ubuntu 16.04安装Bless十六进制编辑器
一款专注于十六进制的编辑器. 安装: sudo apt-get install bless 启动: