1、进程分类
交互进程、批处理进程、守护进程
守护进程:由系统在开机时,通过脚本自动激活启动或超级管理用户root来启动,如/etc/init.d/httpd就是httpd服务器的守护进程,/etc/init.d/httpd文件:定义httpd服务器的启动脚本运行级别
2、进程的属性
进程ID(PID):用来区分进程,数值
父进程和父进程的ID(PPID)
启动进程的用户ID(UID)和所归属的组(GID)
进程状态:状态分别为运行R、休眠S、僵尸Z
进程执行的优先级
进程所连接的终端名
进程资源占用,如占用资源大小(内存、CPU占用量)
3、父进程和子进程
父进程和子进程的关系是管理和被管理的关系。
当父进程终止时,子进程也随之终止;子进程终止,父进程并不一定终止
4、ps监视进程工具
ps的参数
l:长格式输出
u:按用户名和启动时间的顺序来显示进程
j:用任务格式来显示进程
f:用树状格式来显示进程
a:显示所有用户的所有进程(包括其他用户)
x:显示无控制终端的进程
r:显示运行中的进程
ww:避免详细参数被截断
*常用的选项组合时aux或lax、f
ps应用举例
ps aux (最常用),用管道和more连接起来分页查看
# ps -aux |more
# ps -aux > ps001.txt
# more ps001.txt //把所有的进程显示出来,并输出到ps001.txt文件,然后通过more来分页查看
提取指定程序的进程
# ps aux |grep httpd
父进程和子进程的关系友好判断的例子
# ps auxf |grep httpd
5、pgrep查询进程工具:通过进程名字来查询进程的工具,用来判断进程是否正在运行
参数
l:列出程序名和进程ID
o:进程起始的ID
n:进程终止的ID
6、kill、killall、pkill、xkill终止进程的工具
场景:
一个程序已经死掉,但又不能退出
应用的场合在服务器管理中,在不涉及数据库服务器程序的父进程的停止运行时(这些工具强行终止数据库服务器,会让数据库产生更多的文件碎片,碎片多了,数据库会崩溃),如Mysql服务器最好时按其正常的程序关闭,而不是用pkill mysqld这样来关闭
kill函数:kill [信号代码] 进程ID
# kill 4840 //杀掉4840这个进程
# ps -auxf |grep httpd //查看httpd服务器仍在进行
# kill 4830 //杀掉httpd的父进程
# ps -qux |grep httpd //查看httpd的其他子进程食肉仍在运行
kill -9:对于僵尸进程来强制终止退出
killalll函数:可以通过程序的名字直接杀死所有进程,killall 正在运行的程序名
# pgrep -l gaim //查看哪些程序运行
2979 gaim
# killall gaim
pkill函数:#pkill 正在运行的程序名
# pgrep - l gaim
2979 gaim
# pkill gaim
xkill函数:在桌面上用杀死图形界面的程序
# xkill
7、top
# top
9、Linux进程结构
Linux一个进程:在内存里有三部分数据:
数据段(存放程序的全局变量、常数、动态数据分配的数据空间)
堆栈段(存放子程序的返回地址、子程序的参数、程序的局部变量),系统如果同时运行数个相同的程序,它们之间不能使用同一个堆栈段和数据段
代码段(存放了程序代码的数据),假如机器中有数个进程运行同一程序,那么可以使用一个代码段
10、Linux进程调度
程序使用CPU模式:IO密集型(响应时间非常重要)、计算密集型(CPU周转时间比较重要)、平衡型(响应和周转之间的平衡时最重要的)
11、进程创建
Linux主要提供了fork、vfork、clone三种进程创建的方法
12、僵尸进程:已经结束了进程,没有任何执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集。需要等它的父进程来为它收尸
避免僵尸进程:父进程通过wait和waitpid等函数等待子进程结束