进程(特别概念四)


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



8、进程的优先级:nice和renice



9、Linux进程结构

Linux一个进程:在内存里有三部分数据:

数据段(存放程序的全局变量、常数、动态数据分配的数据空间)

堆栈段(存放子程序的返回地址、子程序的参数、程序的局部变量),系统如果同时运行数个相同的程序,它们之间不能使用同一个堆栈段和数据段

代码段(存放了程序代码的数据),假如机器中有数个进程运行同一程序,那么可以使用一个代码段


10、Linux进程调度 

程序使用CPU模式:IO密集型(响应时间非常重要)、计算密集型(CPU周转时间比较重要)、平衡型(响应和周转之间的平衡时最重要的)


11、进程创建

Linux主要提供了fork、vfork、clone三种进程创建的方法


12、僵尸进程:已经结束了进程,没有任何执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集。需要等它的父进程来为它收尸

避免僵尸进程:父进程通过wait和waitpid等函数等待子进程结束





猜你喜欢

转载自blog.csdn.net/qq_27397357/article/details/53421890