本节所讲内容:
• Linux进程管理
• screen 实战后台实时执行命令备份命令
进程管理:
pstree
ps
top
nice 修改进程优先级
kill
前台后台进程切换
free 查看内存
screen
程序与进程:
程序是静态的(文件),进程是动态的(运行的程序)。
进程和线程:
一个程序至少有一个进程,一个进程至少有一个线程.
进程之间内存是独立
线程之间内存共享 ,高并发好一些 。 安全性差一些。
查看进程树
显示进程号 -p
systemd(1)-+-ModemManager(1017)-+-{ModemManager}(1027)
| `-{ModemManager}(1029)
显示目录树形结构
[root@xuegod61 ~]# rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
[root@xuegod61 ~]# tree /etc/default/
/etc/default/
├── grub
├── nss
└── useradd
0 directories, 3 files
列出目前所有的正在内存当中的进程
ps -aux
[root@xuegod61 ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 188928 4000 ? Ss 06:57 0:02 /usr/lib/systemd/systemd--switched-root --system --deseri
root 2 0.0 0.0 0 0 ? S 06:57 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 06:57 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 06:57 0:00 [kworker/0:0H]
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
[root@xuegod61 ~]# ps -aux | grep vim
root 39395 0.3 0.1 151452 5136 pts/0 T 07:50 0:00 vim a.txt
root 39397 0.0 0.0 112644 952 pts/0 S+ 07:50 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 命令的执行结果:
[root@localhost ~]# 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 | 进程状态。 |
%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
[root@xuegod61 ~]# ps -aux | grep top
root 39747 0.4 0.0 146512 2428 pts/0 S+ 08:21 0:04 top
[root@xuegod61 ~]# kill -9 39747
killall 通过程序的名称,直接杀死所有进程
[root@xuegod61 ~]# yum -y install httpd
[root@xuegod61 ~]# systemctl start httpd
[root@xuegod61 ~]# ps -aux | grep httpd
root 39962 0.0 0.1 226128 5052 ? Ss 08:38 0:00 /usr/sbin/httpd -DFOREGROUND
apache 39974 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND
apache 39975 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND
apache 39976 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND
apache 39977 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND
apache 39978 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND
root 39985 0.0 0.0 112644 956 pts/1 S+ 08:39 0:00 grep --color=auto httpd
[root@xuegod61 ~]# killall httpd
或者
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)查看一下有没有对应的进程,有的话杀死
[root@xuegod61 ~]# ps -aux | grep vim
root 39395 0.0 0.1 151452 5136 pts/0 T 07:50 0:00 vim a.txt
root 40034 0.0 0.0 112644 956 pts/0 S+ 08:43 0:00 grep --color=auto vim
[root@xuegod61 ~]# kill -9 39395
2)如果还不能解决
[root@xuegod61 ~]# rm -rf .a.txt.swp
优先级控制:
nice值 -20 ~ 19 越小优先级越高 普通用户0-19
nice
作用:以什么优先级运行进程 。默认优先级是0
语法: nice -n 优先级数字
[root@xuegod61 ~]# nice -n -5 vim a.txt
[root@xuegod61 ~]# ps -aux | grep vim
root 40128 0.0 0.1 151452 5152 pts/0 S<+ 08:48 0:00 vim a.txt
root 40149 0.0 0.0 112644 956 pts/1 S+ 08:49 0:00 grep --color=auto vim
[root@xuegod61 ~]# top -p 40128
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
40128 root 15 -5 151452 5152 2528 S 0.0 0.1 0:00.05 vim
renice #修改正在运行的进程的优先级
[root@xuegod61 ~]# renice -n 5 40168
35281 (process ID) old priority 0, new priority 5
了解:
前后台进程切换:
任务:nohup 如何创建一个后台指令
jobs 列出所有的后台进程
[root@xuegod61 ~]# vim b.txt &
[2] 40281
[root@xuegod61 ~]# jobs
[1]- Stopped nice -n -5 vim a.txt
[2]+ Stopped vim b.txt
fg把后台进程调到前台
[root@xuegod61 ~]# fg 2
free 查看系统内存使用状况
[root@xuegod61 ~]# free -m
total used free shared buff/cache available
Mem: 3937 613 2606 10 717 2999
Swap: 2047 0 2047
buffers #缓存从磁盘读出的内容
cached #缓存需要写入磁盘的内容
[root@xuegod61 ~]# dd if=/dev/zero of=/a.txt count=10 bs=100M
清空缓存
reboot
[root@xuegod61 ~]# echo 3 > /proc/sys/vm/drop_caches
[root@xuegod61 ~]# free -m
total used free shared buff/cache available
Mem: 3937 561 3194 10 181 3174
Swap: 2047 0 2047
screen 实战后台实时执行命令备份命令。
1、安装screen软件包
[root@xuegod61 ~]# rpm -ivh /mnt/Packages/screen-4.1.0-0.21.20120314git3c2946.el7.x86_64.rpm
或者
[root@xuegod61 ~]# yum -y install screen
2、直接在命令行键入screen命令
3、[root@xuegod61 ~]# vim 1.sh
命令模式按ctrl+a+d,出现[detached] 即可,再关闭pst
4、重新打开一个终端执行以下命令
[root@xuegod61 ~]# screen -ls
There is a screen on:
40510.pts-0.xuegod61 (Detached)
1 Socket in /var/run/screen/S-root.
5、调出挂起的程序
[root@xuegod61 ~]# screen -r 40510
6、如果你想终止screen则直接把你当前使用的终端关掉就可以了,或者exit