什么是进程
UNIX标准把进程定义为“一个其中运行着一个或者多个线程的地址空间和这些线程所需要的系统资源”。线程还未了解,目前可以把进程看做是正在运行的程序。
操作系统如何表示一个进程?
在虚拟目录/proc(以进程为单位存储内存的映射),可以窥视正在运行的进程的内部情况,好像进程是目录中的文件一样。
进程的静态描述:由三部分组成 PCB、有关程序段和该程序段对其进行操作的数据结构集。
各部分的作用:
1 进程控制块:用于描述进程情况及控制进程运行所需的全部信息。
2 程序段:是进程中能被进程调度程序在CPU上执行的程序代码段。
3 数据段:一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行后产生的中间或最终数据。
进程控制块PCB
每个进程在内核中都有一个进程控制块(PCB)存放进程的管理和控制信息,Linux内核的进程控制块是task_struct的结构体,而task_struct包含以下内容::
(1)PID:又称进程标识符,每个进程都会被分配一个唯一的数字编号,用来区别其他进程,数字1一般为特殊进程init保留的。
(2)状态:任务状态,退出代码,退出信号等。
(3)优先级:相对于其他进程的优先级。
(4)程序计数器:程序中即将被执行的下一条指令的地址。
(5)内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
(6)上下文数据:进程执行时处理器的寄存器中的数据。
(7)I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和正在被进程使用的文件列表。
(8)44记账信息:可能包括处理器时间总和,使用的时钟总数,时间限制,记账号等。
进程管理的命令
查看命令ps
-e 显示所有进程
-f 全格式
-h 不显示标题
-l 长格式
-w 宽输出
进程的状态STAT
D:不可中断的休眠(通常表示该进程正在进行I/O动作)
R:正在执行中
S:休眠状态
T:暂停执行
W:没有足够的内存分页可分配
<:高优先顺序的进程
N:低优先顺序的进程
L:有内存分页分配并锁在内存内(即时系统或定制I/O)
2、启动进程
进程的运行方式: 前台 ./main(path/ELF)
后台 ./main &(path/ELF &)
3、关闭进程
前台运行: Ctrl + c
后台运行: kill pid
4、前后与后台切换
jobs:显示后台执行任务
fg 任务号:将后台执行的进程放到前台执行
bg 任务号:将挂起的进程放到后台执行
5、挂起进程(暂停)
kill -stop pid(kill命令是通过向进程发送指定的信号来结束的。默认为TERM信号。TERM信号将终止所有不能捕获该信号的进程,对于能捕获该信号的进程需要使用kill –9信号,该信号是不能被捕获的。)