一、进程的相关概念
1.什么是进程?
进程:程序的一次执行过程就会创建一个进程,进程就是一个正在执行的任务,进程的所用信息通过task_struct(PCB)结构体记录,进程是分配资源的最小单位,进程是调度器调度的实体,每一个进程单独拥有自己的0-3G的(虚拟内存)空间,这0-3G包含堆、栈区、静态库。还包括文件描述符的表。程序执行结束的时候0-3G的空间就会被释放了,每一个进程都有自己的唯一的标识pid,pid就是进程号。
进程号pid:进程的唯一的标识,它是一个非负整数,由操作系统随机分配。pid就可以理解为进程的身份证号ID。系统中正在执行的进程的进程号可以在/proc目录下查看。
注:在操作系统上查看一个操作系统能够分配的最大的进程号的命令cat /proc/sys/kernel/pid_max ===>131072
2.进程和程序有什么区别?
进程:进程是动态的,具有生命周期,正在运行的进程在内存上存放。
程序:程序是静态的文件,没有生命周期,它是在磁盘上存放着。在执行一个程序的时候就会创建一个进程。
3.进程的组成部分
进程的组成部分:进程控制块PCB,数据段,程序段组成
进程控制块(pcb):进程控制块其实在内核空间就是一个task_struct结构体,这个结构体记录了进程的所有的信息,例如进程的标号pid,进程的执行状态,进程的使用的内存空间等等。
数据段:堆、栈、.data、.bss
程序段:存放的是a.out的可执行程序的文本
示例:
struct task_struct{
进程的pid
进程的状态state
进程运行的内存
...
};
4.进程的种类
交互进程:交互进程是由shell控制的,交互进程可以是前台进程,也可以是后台进程(./a.out &)。例如文本编辑器
批处理进程:批处理进程不属于某一个终端,在操作系统内部维护了一个队列。例如gcc编译程序的过程
守护进程:守护进程一直在后台执行,随着系统的启动而运行,随着系统的终止而终止。例如:服务
5.一些特殊的进程
0号进程(idle):在linux系统启动的时候,执行操作系统代码的进程,当没有其他进程需要执行的时候就会运行0号进程
1号进程(init):1号进程是0号进程通过kernel_thread(内核)函数创建的,后面的进程都是拷贝这个进程得到的。1号进程可以回收没有回收的资源
2号进程(kthreadd):2号进程是0号进程通过kernel_thread(内核)函数创建的,调度进程执行的进程
6.进程的状态
进程的状态
D //不可中断的等待态(sleep)(不可被信号中断)
R //运行态
S //可中断的等待态(sleep)(可被信号中断)
T //停止态
t //代码追踪调试状态
X //死亡态
Z //僵尸,子进程死了,父进程没有为他收尸,如果父进程也死掉,init进程为它收尸
进程的附加状态
< 高优先级的进程
N 低优先级的进程
L 将进程的所在的内存所在内存区间
s 会话组组长
l 在进程中包含多线程
+ 前台进程
二、进程操作相关的一些命令
1.ps命令
①ps -ef (查看进程的pid和ppid)
运行结果:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 05:11 ? 00:00:06 /sbin/init auto noprompt
root 2 0 0 05:11 ? 00:00:00 [kthreadd]
root 3 2 0 05:11 ? 00:00:00 [rcu_gp]
root 4 2 0 05:11 ? 00:00:00 [rcu_par_gp]
//UID:进程所属的用户
//PID:进程的ID号
//PPID:父进程的ID号
//pidof a.out 可以查看a.out的进程号
②ps aux (查看进程的状态)
运行结果:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 225416 7896 ? Ss 05:11 0:06 /sbin/init auto noprompt
root 2 0.0 0.0 0 0 ? S 05:11 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 05:11 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 05:11 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< 05:11 0:00 [kworker/0:0H-kb]
root 9 0.0 0.0 &nbs