一、进程
进程概念:
进程是一个独立的,可以调度的任务,是一个抽象的实体,是一个程序一次执行的过程,它是一个动态的概念,是程序执行的过程,包括创建、调度、消亡,它是程序执行和资源管理的最小单位。每一个进程创建或者是开启的时候,操作系统都会给当前进程分配虚拟内存,一个操作系统中的所有进程的虚拟内存空间都是一样大的,这样便于操控,但是并不意味着对应的物理内存一样大,实际使用多少空间,最终再将其映射到物理内存上。
父进程:ppid(进程号)
子进程:pid (进程号)
特殊的进程:
0号进程:在内核空间,是内核运行的第一个进程
1号进程:init进程,是所有进程的祖先
Linux系统中的进程类型:
交互进程:
是由shell控制和运行的,它既可以在前台运行,也可以在后台运行
批处理进程:
它不属于某个终端,它被提交到一个队列中以便顺序执行
守护进程:
它在后台运行,一般在Linux启动是开始执行,系统关闭时才结束
进程的调度机制:
时间片轮转,上下文切换
二、进程的操作
查看命令
ps命令:
ps 查看系统中进程以及子进程的信息
ps aux 查看系统中所有的进程的信息
信息如下:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 进程用户
PID: 当前进程进程号
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码
STAT: 该进程的状态
START: 进程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
ps ajx 查看系统中所有的进程的信息
信息如下:
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
PPID: 父进程进程号
PID: 当前进程进程号
PGID: 进程组号
SID: 会话者ID
TTY: 终端的次要装置号码 (minor device number of tty)
TPGID: 进程连接到的终端上的前台进程组的ID,如果进程未连接到终端,则为-1,表示守护进程
STAT: 该进程的状态
UID: 进程拥有者id
TIME: 执行时间
COMMAND: 所执行的指令
进程的状态
D 静止态
R 运行态
S 睡眠态
T 停止态
Z 僵尸态
+ 前台进程
< 高优先级的进程
l 多进程的
s 会话组组长
进程相关函数
fork()
头文件:
#include <sys/types.h>
#include <unistd.h>
标准:
pid_t fork(void);
功能:
创建一个子进程
参数:
没有(void空类型)
返回值:
成功:
>0 子进程的进程号,标识父进程的代码区
0 标识子进程的代码区
失败:
-1
getpid( )/getppid( )
头文件:
#include <sys/types.h>
#include <unistd.h>
标准:
pid_t getpid(void);
pid_t getppid(void);
功能:
获取当前进程的进程号
获取当前进程的父进程的进程号
_exit
头文件:
#include <unistd.h>
标准:
void _exit(int status);
功能:
结束一个进程
参数:
status:退出状态值,父进程通过wait函数可以获取到这个值
如果不返回状态,设置0,表示正常退出,非0表示错误退出
返回值:
无
_exit属于系统调用,不会刷新缓冲区
exit
头文件:
#include <stdlib.h>
标准:
void exit(int status);
功能:
结束一个进程
参数:
status:退出状态值,父进程通过wait函数可以获取到这个值
如果不返回状态值,设置0表示正常退出,非0表示错误退出
返回值:
无
atexit
头文件:
#include <stdlib.h>
标准:
int atexit(void(*function)(void));
功能:
注册一个函数,当进程结束时执行
参数:
functionn:要执行的函数的首地址,就是传函数名
返回值:
成功:0
失败:非0
特殊的进程
孤儿进程
父进程结束,子进程就成为了孤儿进程,会又1号进程领养
僵尸进程
子进程结束,但没有完全释放内存,该进程就称为了僵尸进程
守护进程
守护进程常常在系统启动时开始运行,在系统关闭时终止。
守护进程也会是我们所说的 Daemon进程,是Linux中的后台服务进程。
华清远见学习总结 (2)