Please enable JavaScript.
Coggle requires JavaScript to display documents.
进程 (进程控制, 进程概述) - Coggle Diagram
进程
进程控制
进程的挂起
进程在一定的时间内没有任何动作,称为进程的挂起
include <unistd.h>unsigned int sleep(unsigned int sec);
功能:进程挂起指定的秒数,直到指定的时间用完或收到信号才解除挂起。返回值:若进程挂起到sec指定的时间则返回0,若有信号中断则返回剩余秒数。注意:进程挂起指定的秒数后程序并不会立即执行,系统只是将此进程切换到就绪态。
进程的等待
父子进程有时需要简单的进程间同步,如父进程等待子进程的结束。linux下提供了以下两个等待函数wait()、waitpid()。需要包含头文件:#include <sys/types.h>#include <sys/wait.h>
pid_t wait(int *status);功能:等待子进程改变状态,如果子进程终止了,此函数会回收子进程的资源。调用wait函数的进程会挂起,直到它的一个子进程退出或收到一个不能被忽视的信号时才被唤醒。若调用进程没有子进程或它的子进程已经结束,该函数立即返回。
进程的创建
在linux环境下,创建进程的主要方法是调用以下函数:
include <sys/types.h>
include <unistd.h>
pid_t fork(void);
fork函数:创建一个新进程pid_t fork(void)功能:fork()函数用于从一个已存在的进程中创建一个新进程,新进程称为子进程,原进程称为父进程。返回值:成功:子进程中返回0,父进程中返回子进程ID。失败:返回-1。
僵尸进程(Zombie Process)父进程未运行结束,已运行结束的子进程。
孤儿进程(Orphan Process)父进程运行结束,但子进程未运行结束的子进程。
守护进程(精灵进程)(Daemon process)守护进程是个孤儿进程,它提供系统服务,常常在系统启动时启动,仅在系统关闭时才终止。这种进程脱离终端,在后台运行。
进程的终止
在linux下可以通过以下方式结束正在运行的进程:
void exit(int value);
void _exit(int value);
exit函数:结束进程执行
include <unistd.h>
void exit(int value)参数:status:返回给父进程的参数(低8位有效)。_exit函数:结束进程执行#include <unistd.h>void _exit(int value)参数:status:返回给父进程的参数(低8位有效)。
进程在退出时可以用atexit函数注册退出处理函数。include <stdlib.h>
int atexit(void (*function)(void));
功能:注册进程正常结束前调用的函数。参数:function:进程结束前,调用函数的入口地址。一个进程中可以多次调用atexit函数注册清理函数,正常结束前调用函数的顺序和注册时的顺序相反。
进程号
每个进程都由一个进程号来标识,其类型为pid_t,进程号的范围:0~32767。进程号总是唯一的,但进程号可以重用。当一个进程终止后,其进程号就可以再次使用了。在linux系统中进程号由0开始。进程号为0及1的进程由内核创建。进程号为0的进程通常是调度进程,常被称为交换进程(swapper)。进程号为1的进程通常是init进程。除调度进程外,在linux下面所有的进程都由进程init进程直接或者间接创建。 进程号(PID)标识进程的一个非负整型数。父进程号(PPID)任何进程(除init进程)都是由另一个进程创建,该进程称为被创建进程的父进程,对应的进程号称为父进程号(PPID)。进程组号(PGID)进程组是一个或多个进程的集合。他们之间相互关联,进程组可以接收同一终端的各种信号,关联的进程有一个进程组号(PGID )
Linux操作系统提供了三个获得进程号的函数getpid()、getppid()、getpgid()。需要包含头文件:#include <sys/types.h>#include <unistd.h>
pid_t getpid(void)返回值:本进程号(PID)pid_t getppid(void)返回值:调用此函数的进程的父进程号(PPID)pid_t getpgid(pid_t pid)参数:0当前PGID,否则为指定进程的PGID返回值:进程组号(PGID)例:01_pid.c
-
进程概述
进程的状态及转换
进程整个生命周期可以简单划分为三种状态:
就绪态:进程已经具备执行的一切条件,正在等待分配CPU的处理时间。 执行态:该进程正在占用CPU运行。 等待态:进程因不具备某些执行条件而暂时无法继续执行的状态。
进程控制块
进程控制块(PCB)OS是根据PCB来对并发执行的进程进行控制和管理的。系统在创建一个进程的时候会开辟一段内存空间存放与此进程相关的PCB数据结构。PCB是操作系统中最重要的记录型数据结构。PCB中记录了用于描述进程进展情况及控制进程运行所需的全部信息。PCB是进程存在的唯一标志,在Linux中PCB存放在task_struct结构体中。
进程的定义
进程的定义
程序:程序是存放在存储介质上的一个可执行文件。进程:进程是程序的执行实例,包括程序计数器、寄存器和变量的当前值。程序是静态的,进程是动态的:程序是一些指令的有序集合,而进程是程序执行的过程。进程的状态是变化的,其包括进程的创建、调度和消亡。