本节所讲内容:
Linux进程管理
screen 实战后台实时执行命令备份命令
进程管理:
pstree
ps
top
nice 修改进程优先级
kill
前台后台进程切换
free 查看内存
screen
程序与进程:
程序是静态的(文件),进程是动态的(运行的程序)。
进程和线程:
一个程序至少有一个进程,一个进程至少有一个线程.
进程之间内存是独立
线程之前内存共享 ,高并发好一些 。 安全性差一些。
查看进程树
显示进程号 -p
[[email protected] ~]# pstree -p | more
systemd(1)-+-ModemManager(1013)-+-{ModemManager}(1046)
| `-{ModemManager}(1072)
|-NetworkManager(1002)-+-{NetworkManager}(1074)
| |-{NetworkManager}(1076)
显示目录树形结构
[[email protected] ~]# yum -y install tree
[[email protected] ~]# tree /boot/ | more
/boot/
├── config-3.10.0-229.el7.x86_64
├── grub2
│ ├── device.map
│ ├── fonts
│ │ └── unicode.pf2
│ ├── grub.cfg
列出目前所有的正在内存当中的进程
ps -aux
[[email protected] ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.1 57172 4276 ? Ss 20:21 0:02 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S 20:21 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 20:21 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 20:21 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 20:21 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 20:21 0:00 [rcu_bh]
USER:运行此进程的用户名
PID :该 process 的号码。
%CPU:该 process 使用掉的 CPU 资源百分比;
%MEM:该 process 所占用的物理内存百分比;
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,Linux进程有5种基本状态:
R :(正在运行或在运行队列中等待) ;
S :该程序目前正在睡眠当中 ,但可被某些讯号 (signal) 唤醒。
T :该程序目前暂停了
例: vim a.txt 按下: ctrl+z
[[email protected] ~]# ps -aux | grep vim
root 2634 0.2 0.1 151396 5104 pts/0 T 20:59 0:00 vim a.txt
root 2644 0.0 0.0 112640 956 pts/0 S+ 20:59 0:00 grep --color=auto vim
ctrl-c 是发送 SIGINT 信号,终止一个进程
ctrl-z 是发送 SIGSTOP信号,挂起一个进程
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
D: 不可中断状态.
< 高优先级的
N 低优先级的
s 包含子进程
l 多线程
+ 前台程序
START:该 process 被触发启动的时间;
TIME :该 process 实际使用 CPU 运作的时间。
COMMAND:该程序的实际指令
了解:
ps -ef
ps -aux 是用BSD的格式来显示进程。
ps -ef 是用标准的格式显示进程。
top 动态查看进程
统计信息区前五行是系统整体的统计信息。
1. 第一行是任务队列信息
同 uptime 命令的执行结果:
[[email protected] ~]# uptime
21:13:25 up 52 min, 4 users, load average: 0.06, 0.03, 0.05
其内容如下:
21:13:25 |
当前时间 |
up 52 min |
系统运行时间,格式为时:分 |
4 users, |
当前登录用户数 |
load average: 0.06, 0.03, 0.05 |
系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 |
一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果你的主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于4*3=12即表示系统负载不是很严重.
2. 第二、三行为进程和CPU的信息
当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 29 total |
进程总数 |
1 running |
正在运行的进程数 |
28 sleeping |
睡眠的进程数 |
1 stopped |
停止的进程数 |
0 zombie |
僵尸进程数 |
Cpu(s): 0.3% us |
系统用户进程使用CPU百分比。 不包括调高优先级的进程。 CPU%是由每个核的CPU占用律之和算出来的。如果你是4核CPU,核1,CPU使用率为100%,核2,CPU使用率为100%。 则会出会CPU 高于100%的现象,最终为200% |
1.0% sy |
内核中的进程占用CPU百分比 |
0.0% ni |
用户进程空间内改变过优先级的进程占用CPU百分比 |
98.7% id |
空闲CPU百分比 |
第四五行为内存信息。内容如下:
Mem: 191272k total |
物理内存总量 |
173656k used |
使用的物理内存总量 |
17616k free |
空闲内存总量 |
22052k buff/cache |
用作内核缓存的内存量。 和free –k 一个意思 |
Swap: 192772k total |
交换区总量 |
0k used |
使用的交换区总量 |
192772k free |
空闲交换区总量 |
3123008 avail Mem |
总的可利用内存是多少 |
二. 进程信息
列名 |
含义 |
PID |
进程id |
USER |
进程所有者的用户名 |
NI |
进程优先级。 nice值。负值表示高优先级,正值表示低优先级 |
RES |
实际使用内存大小。 |
S |
进程状态。 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
%CPU |
上次更新到现在的CPU时间占用百分比 |
%MEM |
进程使用的物理内存百分比 |
TIME+ |
进程使用的CPU时间总计,单位1/100秒 |
COMMAND |
命令名/命令行 |
top快捷键:
默认3s刷新一次
空格 :立即刷新。
q退出
M按内存排序
P按CPU排序
<> 翻页
控制(关闭)进程:
kill 给进程发送信号(停止进程)
常用信号:
1 HUP 重新加载配置文件。类似重启。
2 INT 和ctrl+c一样 一般用于通知前台进程组终止进程
9 KILL 强行中断
19 STOP 和ctrl+z一样
任务:百度一下常见的信号
例:
语法:kill -9 pid
[[email protected] ~]# ps -aux | grep top
root 1987 0.0 0.5 908168 22496 ? Sl 20:24 0:00 nautilus --no-default-window --force-desktop
root 34972 0.4 0.0 130288 2164 pts/0 S+ 21:49 0:00 top
[[email protected] ~]# kill -9 34972
killall 通过程序的名字,直接杀死所有进程
[[email protected] ~]# yum -y install httpd
[[email protected] ~]# systemctl start httpd
[[email protected] ~]# ps -aux | grep httpd
root 35037 0.0 0.1 209000 4772 ? Ss 21:51 0:00 /usr/sbin/httpd -DFOREGROUND
apache 35038 0.0 0.0 211084 2952 ? S 21:51 0:00 /usr/sbin/httpd -DFOREGROUND
apache 35039 0.0 0.0 211084 2952 ? S 21:51 0:00 /usr/sbin/httpd -DFOREGROUND
apache 35040 0.0 0.0 211084 2952 ? S 21:51 0:00 /usr/sbin/httpd -DFOREGROUND
apache 35041 0.0 0.0 211084 2952 ? S 21:51 0:00 /usr/sbin/httpd -DFOREGROUND
apache 35042 0.0 0.0 211084 2952 ? S 21:51 0:00 /usr/sbin/httpd -DFOREGROUND
root 35055 0.0 0.0 112640 960 pts/0 S+ 21:53 0:00 grep --color=auto httpd
[[email protected] ~]# killall httpd
[[email protected] ~]# systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
Active: failed (Result: exit-code) since Fri 2015-12-04 21:53:27 CST; 29s ago
或者:
[[email protected] ~]#pkill httpd
扩展
vim a.txt #出现以下情况
E325: ATTENTION
Found a swap file by the name ".a.txt.swp"
owned by: root dated: Fri Dec 4 20:59:24 2015
解决思路:
1)查看一下有没有对应的进程,有的话杀死
[[email protected] ~]# ps -axu | grep vim
[[email protected] ~]# kill -9 2702
2)如果还不能解决,
[[email protected] ~]# rm -rf .a.txt.swp
优先级控制:
nice值 -20 ~ 19 越小优先级越高 普通用户0-19
nice
作用:以什么优先级运行进程 。默认优先级是0
语法: nice -n 优先级数字
[[email protected] ~]# nice -n -5 vim a.txt
[[email protected] ~]# ps -aux | grep vim
root 35209 0.0 0.1 151396 5124 pts/2 S<+ 22:04 0:00 vim a.txt
[[email protected] ~]# top -p 35209
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
35209 root 15 -5 151396 5124 2528 S 0.0 0.1 0:00.03 vim
renice #修改正在运行的进程的优先级
[[email protected] ~]# renice -n 5 35281
35281 (process ID) old priority 0, new priority 5
了解:
前后台进程切换:
任务:nohup后台指令如何创建
jobs 列出所有后台进程
[[email protected] ~]# vim a.txt &
[2] 35335
fg 后台程序改成前台
用法: fg 后期进程序列号
例:
[[email protected] ~]# fg 1
free 查看系统内存量
-m按照MB显示
[[email protected] ~]# free -m
total used free shared buff/cache available
Mem: 3939 572 2644 9 721 3047
Swap: 2047 0 2047
buffers #缓存从磁盘读出的内容
cached #缓存需要写入磁盘的内容
运行:
[[email protected] ~]# find / #在另一个终端查看buffers 增加速度
[[email protected] ~]# dd if=/dev/zero of=/a.txt count=10 bs=100M #在另一个终端查看cache增加速度
清空缓存
[[email protected] ~]# echo 3 > /proc/sys/vm/drop_caches
[[email protected] ~]# free -m
total used free shared buff/cache available
Mem: 3939 519 3251 9 168 3226
Swap: 2047 0 2047
screen 实战后台实时执行命令备份命令。
1. 安装screen软件包
[[email protected] ~]# rpm -ivh /mnt/Packages/screen-4.1.0-0.19.20120314git3c2946.el7.x86_64.rpm
或
[[email protected] ~]# yum -y install screen
2. 直接在命令行键入screen命令
[[email protected] ~]# screen
3. [[email protected] ~]# vim 1.sh
命令模式按ctrl+a+d,出现[detached] 即可,再关闭pst
4. 重新打开一个pst窗口执行
[[email protected] ~]# screen -ls
There is a screen on:
3107pxs-0.xuegod63 (Detached)
1 Socket in /var/run/screen/S-root.
5. [[email protected] ~]# screen -r 2330 #就可以继续进行原来的进程
6. 如果你想终止screen则直接把你当前使用的终端关掉就可以了,或者exit
学习过程中如果问题,请留言。更多内容请加:
学神IT-linux讲师-RM老师QQ:2805537762
学神IT-戚老师QQ:3341251313
学神IT-旭斌QQ:372469347
学神IT教育RHEL7交流群:468845589