首页 > 系统服务 > 详细

LINUX系统编程之进程

时间:2018-04-20 23:25:02      阅读:247      评论:0      收藏:0      [点我收藏+]
LINUX系统编程之进程

一、操作系统职责:管理所有的资源,将不同的设备和不同的程序关联起来。


二、系统调用是操作系统提供给用户程序的一组特殊函数接口,用户程序可以通过这组接口获得系统内核提供的服务,例如:打开文件,关闭文件,读写文件。


三、POSIX(Portable Operation System interface)

Linux中,应用程序编程接口(API)遵循POSIX标准,用于保证应用程序可以在源代码一级上在多种操作系统上移植运行。


四、系统调用按功能逻辑可分为:进程控制、进程间通信、文件系统控制、系统控制、内存管理、网络管理、socket控制、用户管理。

通常用一个负的返回值表明错误,0值表明成功可用perror打印出错信息


五、进程

程序:可执行文件(静态),进程:程序的执行实例(动态)

进程的状态:创建,调度,消亡

进程拥有自己的环境和资源

用exec函数将程序由内核读入内存使其执行起来成为一个进程


六、进程的生命周期

创建

调度

就绪态:已具备执行条件,等待分配CPU时间

执行态:正在占用CPU

等待态:不具备某些执行条件,无法继续执行

消亡


七、PCB(进程控制块)

OS根据PCB对并发执行的进程进行控制和管理,系统在创建一个进程时会开辟一段内存空间存放与此进程相关的PCB数据结构

PCB中记录了用于描述进程进展情况及控制进程运行所需的全部信息。

PCB是进程存在的唯一标志,linux中PCB存放在task_struct结构体中,打开/include/linux/sched.h可以找到task_struct 的定义


八、进程控制

进程号0~32767   0号调度进程   1号init进程

除调度进程外,所有进程都是由init进程直接或间接创建的

PID进程号getpid()   PPID父进程号getppid()  PGID进程组号getpgid()


九、文件描述符:以进程为单位分配0-1023最小可用的描述符


十、进程状态转换

CPU调度算法:优先级,先来先调度,短时间优先,时间片轮转

umask掩码,屏蔽文件权限

ps命令查看当前进程


十一、创建进程 fork()  vfork()

1.fork()在子进程中返回0,在父进程中返回值大于0,调用fork()以后,源程序被复制了一份,两份程序中只有fork()返回值不一样,两份程序同时执行,顺序不定,父子进程物理地址不同,虚拟地址相同。

问:如果一个程序同时执行了三个fork(),它创建了几个进程

fork();1(0)

fork();2(0) 3(1)

fork();4(0) 5(1) 6(2) 7(3)

第一次调用,0号进程创建了1号进程

第二次调用,0号进程创建了2号进程,1号进程创建了3号进程

第三次调用,0号进程创建了4号进程,1号进程创建了5号进程,2号进程创建了6号进程,3号进程创建了7号进程

一共创建了2的n次方减一个进程


2.vfork()一般配合exec使用,子进程共用父进程地址空间,保证子进程先运行,调用exec或exit后父进程再运行

exec函数族是进程替换函数,将新的地址空间赋给原来的进程,进程号不变,新程序从main开始运行

exec只有失败才返回,exec后面的代码不执行

但注意exec是一个函数族,有execlp,execvp,execle,execve等

只能用exit()结束子进程,而return是返回到函数执行的首地址

atexit(void (*function)(void))注册退出处理函数



十二、输入输出缓冲区

系统调用无缓冲

标准IO库函数输入输出为行缓冲

标准IO库操作文件为全缓冲


十三、

僵尸进程:子进程结束而父进程未调用wait()或waitpid()回收其资源

孤儿进程:父进程结束而子进程未结束

守护进程:特殊的孤儿进程,脱离终端运行在后台

wait()/waitpid():等待子进程结束并回收其资源

用ps查看进程,kill+pid或pkill+进程名结束进程


LINUX系统编程之进程

原文:http://blog.51cto.com/13603157/2105975

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!