LINUX系统编程之进程

LINUX系统编程之进程

十年的南关网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整南关建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“南关网站设计”,“南关网站推广”以来,每个客户项目都认真落实执行。

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

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

三、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://myzitong.com/article/ihdgid.html