进程控制编程
1.进程控制理论基础
进程:一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元。
进程的生命周期:创建、运行、撤销。
进程的状态:执行状态、就绪状态、等待状态。
Linux多进程系统拥有并行性,互不干扰。
每个进程都是一个独立的运行单位,拥有各自的权利和责任。
Linux进程三个段:数据段、代码段、堆栈段。
进程ID:
进程ID(PID):标识进程的唯一数字
父进程的ID(PPID)
启动进程的用户ID(UID)
进程互斥:是指当有若干进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,其他要使用该资源的进程必须等待,直到占用该资源者释放了该资源为止。
临界资源:操作系统中将一次只允许一个进程访问的资源称为临界资源。
临界区:进程中访问临界资源的那段程序代码称为临界区,为实现对临界资源的互斥访问,应保证诸进程互斥地进入各自的临界区。
进程同步:一组并发进程按一定的顺序执行的过程称为进程间的同步具有同步关系一组并发进程称为合作进程,合作进程间互相发送的信号称为消息或事件。
进程调度:
概念:
按一定算法,从一组待运行的进程中选出一个来占有CPU运行。
调度方式:
• 抢占式
• 非抢占式
调度算法:
先来先服务调度算法
短进程优先调度算法
高优先级优先调度算法
时间片轮转法
死锁:多个进程因竞争资源而形成一种僵局,若无外力作用,这些进程都将永远不能再向前推进。
2.进程控制编程
获取ID:
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void) 获取本进程ID。
pid_t getppid(void) 获取父进程ID
进程创建:
1.fork
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void)
2.vork
#include <sys/types.h>
#include <unistd.h>
pid_t vfork(void)
区别:
1. fork:子进程拷贝父进程的数据段
vfork:子进程与父进程共享数据段
2. fork:父、子进程的执行次序不确定
vfork:子进程先运行,父进程后运行
exec函数族:
exec用被执行的程序替换调用它的程序。
进程等待:
1.
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait (int * status)
2.
#include <sys/types.h>
#include <sys/wait.h>
pid_t waitpid (pid_t pid, int * status, int options)