进程管理简易版

一 进程介绍#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文件中
  1. 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
孤儿进程:父进程挂掉,子进程有系统进程接管
posted @ 2021-07-07 19:51  小丶凡  阅读(30)  评论(0编辑  收藏  举报
1