Linux--系统进程管理
在早期的计算机中不包含操作系统,从头到位一台计算机只运行了一个程序,并且这个程序能访问计算机中的所有资源,只做一件事情。操作系统的出现使得计算机能运行多个程序,并且不同的程序都在单独的进程中运行,进程又可以启动多个线程。
系统进程
基本概念
计算机
,主要是由内核(Kernel)
和运行在内核之上的众多进程(Process)
来实现的。(内核也是一个程序)内核
,主要负责管理系统的进程,内存,设备驱动和网络等程序
是静态概念,本身作为一种软件资源长期保存;而进程是程序的执行过程,是动态概念,有一定的生命周期,动态产生和消亡的。进程
是指一个在内存中运行的应用程序,一个进程可以启动多个线程。对于计算机来而言,主要工作都在CUP和内存中完成。线程
是指进程中的一个执行流程,线程总是属于某个进程,进程中的多个线程共享进程的内存空间。注意
:程序,由指令+数据组成。
程序的运行
- 一个命令的运行
内存是由内存环的,内核运行在0环(内核空间),用户进程运行在3环(用户空间),当执行一些敏感信息的时候都是由内核完成
。比如运行一个mkdir命令,发起这个命令就启动mkdir这个进程,当按下“Enter”键的时候,程序就会被装载到内存,在内存中会划分一个区域(保存这该进程的数据和指令),这就表示启动一个进程了。当运行起来的时候,就需要创建一个目录,发现需要去操作硬盘,mkdir这个进程通过系统调用会向内核发送操作硬盘的申请。内核接收到申请后,就转入内核模式,mkdir就从cpu中退出了(归队),退出时会保存进程信息(保存在内核中,内核会追踪每一个进程信息,内核里面有一个(task structure)数据结构
;会维护每一个进程信息ID,NAME,PID,PPID等)内核持有CPU,接受到命令读取内存信息并修改,完成后同步到硬盘,该命令执行完成。
- 多个进程的运行
CPU要么由进程所持有,要么由内核所持有,进程的执行信息保存在内存当中,描述信息在内核当中
。当多个程序同时运行的时候(以为同时),多个进程和内核就会轮流的去持有CPU资源。进程所有数据就会加载到内存当中(在内存修改的数据可以同步到硬盘IO设备),CPU就会管理着内存当中的进程(户口本
,该那个进程运行,运行的时间,下一个是谁运行)。CPU只有一个的情况下,当一个进程所持有CPU的时间到了,但没有执行完,内核就会持有CPU保存进程的描述信息(寄存器
,记录执行到哪儿)这个过程叫做保存现场
,进程归队。CPU会调度下一个进程,执行完成后之前的进程如果被唤醒,内核信息里面就会给出之前执行到哪儿的信息,让该进程继续执行,这个过程就叫恢复现场
。 当执行完成之后,该进程就退出了,内存空间就释放了,内核也会销毁这个进程信息。
相关管理工具
查看进程
- 基本命令
ps #查看静态的进程统计信息(processes statistic),当前控制台下该属于该用户的进程
#ps -ef #可以显示出所有用户的进程System V风格,ps aux是BSD风格
top #查看进程动态信息
htop #查看进程动态信息,top的升级版
pgrep #查询进程信息
pstree #查看进程
- ps
说明:
UID: #用户Id
PID : #进程号
PPLD: #父进程的进程号
STIME: #创建进程时间
TTY: #进程启动的终端
STAT: #进程当前状态(S休眠状态,D不可中断的休眠状态,R运行状态,Z僵死状态,T停止
)
NI : #进程优先级
TIME: #进程运行时间
COMMAND/CMD:#进程的命令
%CPU: #占用CPU时间和总时间的百分比
%MEM: #占用内存与系统内存总量的百分比
- pstree
除init进程以外,其他进程都有父进程,init是伴随着系统的启动。
管理进程
- 启动进程
- 前台启动:使用
service 程序 start
,eg:service network start。- 后台程序:使用
service 程序 start $
,eg:service network start $。- 前台启动,放入后台:正在运行的程序,按Ctrl+Z组合键。
- 后台进程,调回前台:使用”job -l”选项显示进程的PID,后通过fg或fg PID 命令讲后台进程调入前台执行。
- 杀掉进程
- kill -1 PID #终端断线
- kill -2 PID #中断正在执行的程序,等于Ctrl + c
- kill -3 PID #退出(同 Ctrl + \)
- kill -9 PID #强制、尽快终止进程
- kill -15 PID #终止进程
- kill -18 PID #继续(与STOP相反, fg/bg命令)
- kill -19 PID #暂停(同 Ctrl + Z)