Linux进程管理
序:
主要学习任务:
判断服务器健康状态
查看运行进程
强行终止进程
进程和程序的区别
一动一静,对应关系-多对多
父进程与子进程
老子管儿子,僵尸和孤儿.
前台进程和后台进程
前台进程
例:ping 127.0.0.1 >>ping.result
在Shell提示处打投入命令后,创建一个子进程,运行命令,Shell等待它的
结束,然后才能返回给用户提示符。这条命令在前台运行,用户在它完成
之前不能执行另一个命令。
后台进程
例:ping 127.0.0.1 >>ping.result & 将结果保存到ping.result文件
在Shell提示处打入一个命令,若后随一个&,Shell创建子进程运行此命令,
但不等待命令退出,而是直接返回到对用户给出提示。
后台进程必须是非交互式的。
扩展:
watch -n 1 ls -l
监听某个命令执行效果,-n时间刷新频露1s
一、进程常用命令
1、w
09:49:34 up 4 min, 2 users, load average: 0.42, 0.81, 0.38
服务器时间开机时长 登录用户数 平均负载:1、5、15分钟(一般0.8以下,说明较轻)
USER 登录用户名
TTY 在哪登录 :0表示XWindow登录
FROM 来自哪里 :0.0 表示来自于XWindow - 表示本地命令行登录
LOGIN@ 什么时候登录的
IDLE 空闲时间
JCPU 该终端消耗的CPU时间
PCPU 正在执行程序消耗的时间
WHAT 正在做什么
2、who 简单查看登陆者信息
3、ps查看进程信息 (process status)
-a 显示终端下的进程(不含其他用户)
-u 显示用户和启动时间
-x 表示没有控制终端的进程
-e 显示所有进程,包括没有控制终端的进程
-l 长格式显示
应用实例
ps 显示当前用户自己的进程
ps-l 查看隶属于自己的进程详细信息
ps uU 用户名 查看系统中指定用户执行的进程
ps -le 或 aux 查看所有用户执行的进程详细信息 用得很多 aux可以查看到apache进程是哪个用户
通常结合grep使用 如 ps -le | grep httpd 查看apache进程是否启动
/etc/rc.d/init.d/httpd status 通过启动脚本,也能查看进程是否已启动
ps -le --sortpid 可按pid排序
ps–aux | grep jack 查看jack用户的进程
pstree| more 树状结构显示进程
常见选项的含义
PID 进程号 (process id) 1为init 系统第一个进程
PPID 父进程的进程号(parent process id)
TTY 启动的终端 tty1-7本地 1-6字符 7图形 pts/n远程
STAT 进程当前状态: S休眠 D不可中断的休眠 R运行 Z僵死 T停止
NI 进程优先级
TIME 进程自启动以来占用CPU的总时间
COM/COMMAND 进程的命令名
USER 用户名 (ps -uU 用户名)
%CPU 占用CPU时间和总时间的百分比
%MEM 占用内存与系统内存的百分比
start 进程触发时间
time 占用cpu时间
command 进程本身
4、kill 杀死一个进程
为什么要杀死进程?
该进程占用了过多的CPU时间
该进程锁住的一个终端,使其它前台进程无法运行
运行时间过长,但没有预期的效果
产生了过多的到屏幕或磁盘文件输出 例如find / -name "*"
无法正常退出
关闭进程 kill 进程号(PID)
apache的httpd有很多个,我们关闭了父进程,子进程将自动关闭
或调用/etc/rc.d/init.d/httpd stop
kill的信号 kill -l可以列出
kill -9 进程号 (强行关闭)
kill -1 进程号 (重启进程)
也可以调用/etc/rc.d/init.d/httpd restart重启apache进程
关闭图形程序 xkill 鼠标按哪儿,将关闭哪儿 点右键取消
结束所有同名进程 killall -9进程名称 (如killall httpd)
5、以p开头的命令
pgrep httpd 查看httpd进程的所有pid
重启apache进程:kill -1 `pgrep httpd`
pkill httpd 直接关闭httpd进程,不用查pid了
pkill -9 -t 终端号 踢出登录用户
6、优先级命令
nice
指定程序进行的优先级
格式nice n myprogram
例nice --5 /etc/rc.d/init.d/httpd start (默认是0,指定为-5)
ps -le | grep httpd # NI进程优先级
renice
改变一个正在进行的进程的优先级
例renice n pid
优先级取值范围为(-20,19)默认是0 值越小,权越大
ps -le 中,NI就是优先级
7、前后台进程操作
一个符号:
把进程放到后台运行在后面加 &
ping 127.0.0.1>>/test/ping.result &
另一个终端去查看:
tail -f/test/ping.result
两个操作:
进程的挂起和终止
挂起 ctrl+z 暂停 # ping 127.0.0.1 然后按ctrl+z 此时进程未终止,在后台停止
终止 ctrl+c # ping 127.0.0.1 然后按ctrl+c 进程终止,释放资源
三个命令:
查看被挂起或在后台执行的进程
jobs
进程的恢复
fg [序号] 恢复到前继续运行
bg[序号] 恢复到后台继续运行
若不加序号,则默认将命令作用于+修饰的进程
8、top命令
上面的信息,类似于w显示的信息
第一行:系统当前时间 系统持续时间 登录用户 1,5,15分钟之前的平均负载
第二行:进程总数
第三行:CPU占用率 %id 空闲百分比
第四行:内存使用: 总共 使用 空闲 缓存
第五行:swap使用
下面类似于ps –le信息
内置命令d 然后输入5,将改为每5秒刷新一次
内置命令c 显示整个命令行,而不仅仅显示命令名 command
u用户名 只显示某用户的信息,管理员可以查看某个用户在做什么,
k 提示输入pid 关闭进程
可以在u查看某个用户时,kill掉用户的bash进程,
将用户踢下线,提示输入 kill的信号,例如9强制关闭
r 调优先级
M 内存排序
P CPU排序
q 退出
hor ? 帮助信息
9、free –m 查看内存状态
10、查看proc文件下信息
ls/proc
该目录存放的是进程信息,数字是以pid为目录名,信息存放在目录中
cat/proc/cpuinfo 查看cpu信息
cat/proc/meminfo 内存信息
cat/proc/partitions 分区信息
三、进程分类
1、分类
standalone 独立运行
xinetd 进程托管
atd、crond 计划任务
standalone 独立运行
如apache、mysql的服务,启动后,进程会一直在系统中,
占用CPU和内存资源,等待或处理客户端的请求
占用系统资源多,但响应速度快
xinetd 进程托管 (需要独立安装yum -y install xinetd)
有些服务,用得很少,没必要独立运行例如telnet服务
ls /etc/xinetd.d 查看这个目录中有很多脚本
服务不启动,由xinetd监听这个端口,有客户端访问,则启动进程,等服务完成后,结束进程
响应速度慢一点,但减少了系统资源占用
atd、crond 计划任务
每隔一分钟,从休眠中醒来一次,所以,计划任务不能精确到秒。
2、管理
#chkconfig --list
运行级别:0-6
0 关机
1 单用户模式
2 不完全多用户,不包含NFS服务
3 完全多用户 字符界面
4 未分配
5 图形界面
6 重启
init 0关机 init5 startx init 3
init 6重启
runlevel 查询系统当前运行级别
vi /etc/inittab
id:3:initdefault: 定义系统默认运行级别
列出在每一种运行级别下服务是启动还是关闭
chkconfig --list | grep atd 查看计划任务服务
3、启动服务
RPM包安装的服务:
service 服务名 start|stop|restart|status
例service network start
能被service命令识别是因为,在/etc/rc.d/init.d/下有服务执行脚本
/etc/rc.d/init.d/服务名 start|stop|restart|status
例/etc/rc.d/init.d/httpd start
设置开机自启动
vi /etc/rc.local ---->/etc/rc.d/rc.local
例/etc/rc.d/init.d/httpd start
ntsysv (setup中会调用此工具)
所有系统默认安装服务都可以使用ntsysv命令进行自启动管理
源码包安装的服务:
绝对路径启动
/usr/local/apache2/bin/apachectl start
开机自启动
vi/etc/rc.local
写入启动命令
/usr/local/apache2/bin/apachectl start