进程管理简易版
一 进程介绍#ps -aux
格式:ps [参数]
参数:
-a : 显示一个终端的所有进程
-u : 显示用户、CPU使用率以及内存使用率
-x : 显示命令执行的路径及系统后台运行的进程
常用组合体:ps -aux 和 ps -ef
注:查看CPU和内存使用情况时建议使用:ps -aux, 如果查看父进程则使用:ps -ef
USER : 用户名
PID : 进程ID号
%CPU : CPU使用率
%MEM : 内存使用率
VSZ : 虚拟内存
RSS :实际内存
TTY :终端
STAT :进程状态
START:启动时间
TIME :占用CPU的时间
COMMAND : 执行的命令
进程-进程之进程状态(R、S、D、T、Z、X)
# R- -可执行状态(运行状态)
# S- -可中断睡眠状态(sleeping)
# D- -不可中断睡眠(disk sleep)
# T- -暂停状态
# kill -SIGSTOP(进程进入T状态)
# kill -SIGCONT(进程继续运行)
# Z- -僵死状态
# X- -死亡状态或退出状态(dead)
# N : 优先级低
# s : 包含子进程
# + : 前台运行
# < : 优先级较⾼的进程
# l : 以线程的⽅式运⾏
##进程、线程以及协程
# 强调
D与Z状态的进程都无法用kill -9杀死
查看进程树(pstree)
[root@egon ~]# rpm -qf `which pstree`
psmisc-22.20-16.el7.x86_64
[root@egon ~]# pstree
[root@egon ~]# pstree 104239
bash───bash───bash───bash───pstree
查看ppid
[root@egon ~]# ps -ef | head -3
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11月01 ? 00:00:07 /usr/lib/systemd/systemd --system
root 2 0 0 11月01 ? 00:00:00 [kthreadd]
第二部分:进程信息
动态查看(top)
#top命令的快捷键:
M 按内存的使⽤排序
P 按CPU使⽤排序
N 以PID的⼤⼩排序
R 对排序进⾏反转
f ⾃定义显示字段
1 显示所有CPU的负载
s 改变画⾯更新频率(默认:3秒钟)
1、什么是负载?
平均负载是指,单位时间内,系统处于可运⾏状态和不可中断状态的平均进程数,也就是平均活跃进程数。
# 运行状态数
# 睡眠状态数
# 所有进程数
1分钟内 100进程 5运行态进程 5%
5 100 5 1%
负载怎么来的?
运行态进程 / 总进程 / 单位时间 = 单位时间内的平均负载
0.00, 0.01, 0.05
一分钟 五分钟 十五分钟
Tasks: 92 total, 1 running, 91 sleeping, 0 stopped, 0 zombie
总进程 正在运行 睡眠进程 停止 僵尸进程
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us ⽤户态进程占⽤cpu时间的百分⽐
sys 内核态进程占⽤cpu时间的百分⽐
ni 代表优先被调度的进程占cpu时间的百分⽐
id cpu空闲的百分⽐
wa cpu等待io的百分⽐
hi 硬件中断,处理硬件中断所占⽤CPU的时间
si 软件中断,处理软件中断所占⽤CPU的时间
st 被偷⾛的cpu
KiB Mem : 995692 total, 824928 free, 93828 used, 76936 buff/cache
总体的内存 空闲的内存 使用的内存 buff内存
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
进程号 用户 优先级 nice值 虚拟内存 实际内存 共享内存 进程状态 CPU使用率 内存使用率
三 管理进程
3.1 优先级设置
可以在启动进程时用nice命令设置设置优先级,
# 1、命令
nice [-n <优先级>] [--help] [--version] [执行指令]
# 2、选项介绍:
若 nice命令未指定优先级的调整值,则以缺省值10来调整程序运行优先级,既在当前程序运行优先级基础之上增加10。
-n <优先级> 指定优先级;
--help 帮助信息;
--version 版本信息;
# 3、执行范例:让命令以新的优先级执行
[root@localhost ~]# $ nice -n 5 ls # nice -n -20 命令
# 4、ps -l 命令
其中的几个重要信息有:
UID : 代表执行者的身份
PID : 代表这个进程的代号
PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
PRI :代表这个进程可被执行的优先级,其值越小越早被执行
NI :代表这个进程的nice值
也可以对已运行的进程设置新的优先级
[root@localhost ~]# renice -20 11111
3.2 给进程发送信号
[root@localhost ~]# kill -l # 列出所有支持的信号
示例1:kill -1 重新加载配置文件
# 1、启动vsftpd服务
[root@egon ~]# systemctl start vsftpd # 默认匿名用户共享根目录为/var/ftp
[root@egon ~]# ls /var/ftp/
centos7 pub
# 2、打开浏览器,输入ftp://192.168.12.42/,看到的是/var/ftp下的内容
# 3、修改vsftp的配置文件,默认匿名用户共享根目录改为/test
[root@egon ~]# sed -i '$a anon_root=/test' /etc/vsftpd/vsftpd.conf
# 4、在不启动服务vsftpd的情况下让其加载配置文件
[root@egon ~]# ps aux |grep [v]sftpd
root 50695 0.0 0.0 53288 780 ? Ss 11月01 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
[root@egon ~]# kill -1 50695 # 这期间vsftpd的pid是始终不变的,因为从未关闭过进程
[root@egon ~]# ps aux |grep [v]sftpd
root 50695 0.0 0.0 53288 780 ? Ss 11月01 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
#5、打开浏览器,重新输入ftp://192.168.12.42/,看到的是/test下的内容
例2:
# kill 杀死进程
# kill -15 不加-15,默认发出的就是-15的信号
# kill -9强制杀死
# 暂停kill -19与恢复进程kill -18
# killall -9杀死所有:根据进程名杀所有
[root@egon ~]# killall -9 vim
[root@egon ~]# pkill -9 vim
#查看某个用户开启的进程
[root@egon ~]# pgrep -l -u egon
3.3.1 nohup命令
把运行在前台的应用运行在后台
1、nohup
格式:
nohup [启动命令] &
注:nohup启动会产生一个文件:nohup.out, 用来记录nohup管理的命令的日志。
2、先暂停,后启动
3、使用bg fg方式启动运行
四 查看网络状态(netstat)
netstat:
[root@tianyun ~]# netstat -tnlp # 查看正在监听的,且使用tcp协议的进程
-t tcp协议
-u udp协议
-l listen
-p PID/Program name
-n 不反解,不将IP地址解析为主机名,不将端口号解析成协议名(80 ---> http)
示例
[root@egon ~]# netstat -an |grep :22
[root@egon ~]# netstat -an |grep :80
[root@egon ~]# lsof -i:22
proc文件系统
1、查看系统CPU详情
[root@localhost proc]# cat /proc/cpuinfo
例1:打印出系统的CPU核数
[root@localhost proc]# cat /proc/cpuinfo | grep 'processor' | wc -l
2、查看系统内存
[root@localhost proc]# cat /proc/meminfo
例1:计算出系统内存使用率(脚本)
#!/bin/bash
MemTotal=`cat /proc/meminfo | awk 'NR==1{print $2}'`
MemFree=`cat /proc/meminfo | awk 'NR==2{print $2}'`
emUser=`echo " $MemTotal - $MemFree " | bc`
NUM=`echo " $MemUser * 100 / $MemTotal" | bc`
echo $NUM%
3、系统内核启动参数
[root@localhost ~]# cat /proc/cmdline
注意:当我们卸载/proc后
[root@localhost ~]# umount /proc -l
# 下述命令都不可用
free -m
uptime
lscpu
toop
# 重新挂在
[root@localhost ~]# mount -t proc proc /proc/
-t proc 指定文件系统的类型
proc 文件系统,虚拟文件系统
/proc 挂载点
六 管理后台进程
[root@localhost ~]# sleep 5000 & # 运行程序(时),让其在后台执行
[1] 31143
[root@localhost ~]# sleep 4000 # ^z,将前台的程序挂起(暂停)到后台
[root@localhost ~]# jobs # 中括号内的编号就是作业编号,%1代表作业1
[1]- 运行中 sleep 5000 &
[2]+ 已停止 sleep 4000
[root@localhost ~]# bg %2 # 让作业2在后台运行
[2]+ sleep 4000 &
[root@localhost ~]# fg %1 # 将作业1调回到前台
[root@localhost ~]# jobs
[2]+ 运行中 sleep 4000 &
[root@localhost ~]# kill %2
# nohup 命令 #加在一个命令的最前面,表示不挂断的运行命令
把运行在前台的应用运行在后台
1、nohup
格式:nohup [启动命令] &
注:nohup启动会产生一个文件:nohup.out, 用来记录nohup管理的命令的日志。
2、先暂停,后启动
3、使用bg fg方式启动运行
格式:nohup [启动命令] & (&表示后台运行)
注:nohup启动会产生一个文件:nohup.out, 用来记录nohup管理的命令的日志。
4. 管道中的tee技术
重定向与 tee 他们在使用过程中有什么区别
[root@egon ~]# date > date.txt #直接将内容写入date.txt文件中
[root@egon ~]# date |tee date.txt #命令执行会输出至屏幕,但会同时保存一份至date.txt文件中
- xargs参数传递,主要让一些不支持管道的命令可以使用管道技术
[root@egon ~]# which cat|xargs ls -l
[root@egon ~]# ls |xargs rm -fv
[root@egon ~]# ls |xargs cp -rvt /tmp/ -或-> ls | xargs -I {} cp -rv {} /tmp/
[root@egon ~]# ls |xargs mv -t /tmp/ -或-> ls | xargs -I {} mv {} /tmp
八 僵尸进程与孤儿进程
僵尸进程:进程已经结束但是还占领着PID
孤儿进程:父进程挂掉,子进程有系统进程接管