进程管理

进程管理:pstree、ps、Top、nice 修改进程优先级 、Kill、前台后台进程切换 、free 查看内存、screen

程序与进程:
程序是静态的(文件),进程是动态的(运行的程序)。

进程和线程:
一个程序至少有一个进程,一个进程至少有一个线程. 
进程之间内存是独立
线程之间内存共享 ,高并发好一些 。 安全性差一些。

[root@localhost ~]# pstree ##查看进程树
systemd─┬─NetworkManager───2[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5
[{polkitd}]
├─rhnsd
├─rhsmcertd
├─rsyslogd───2[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4
[{tuned}]
└─wpa_supplicant
[root@localhost ~]# pstree -p ##显示进程号
systemd(1)─┬─NetworkManager(1023)─┬─{NetworkManager}(1037)
│ └─{NetworkManager}(1042)
├─agetty(971)
├─auditd(930)───{auditd}(938)
├─crond(968)
├─dbus-daemon(958)───{dbus-daemon}(964)
├─firewalld(954)───{firewalld}(1334)
├─lvmetad(825)
├─master(1856)─┬─pickup(16851)
│ └─qmgr(1866)
├─polkitd(1047)─┬─{polkitd}(1054)
│ ├─{polkitd}(1055)
│ ├─{polkitd}(1058)
│ ├─{polkitd}(1060)
│ └─{polkitd}(1064)
├─rhnsd(1547)
├─rhsmcertd(1540)
├─rsyslogd(952)─┬─{rsyslogd}(961)
│ └─{rsyslogd}(962)
├─sshd(1533)───sshd(16884)───bash(16888)───pstree(16922)
├─systemd-journal(805)
├─systemd-logind(955)
├─systemd-udevd(835)
├─tuned(1534)─┬─{tuned}(1677)
│ ├─{tuned}(1680)
│ ├─{tuned}(1682)
│ └─{tuned}(1687)
└─wpa_supplicant(1050)

列出目前所有的正在内存当中的进程
ps -aux 
[root@localhost ~]# 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@localhost ~]# ps -aux |grep vim
root 16924 0.1 0.2 151716 5292 pts/0 T 07:50 0:00 vim a.txt
root 16926 0.0 0.0 112660 968 pts/0 R+ 07:51 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 进程状态。
            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
[root@localhost ~]# ps -aux | grep top
root 39747 0.4 0.0 146512 2428 pts/0 S+ 08:21 0:04 top
[root@localhost ~]# kill -9 39747

killall 通过程序的名称,直接杀死所有进程
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# 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@localhost ~]# 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@localhost ~]# 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@localhost ~]# kill -9 39395

2)如果还不能解决
[root@localhost ~]# rm -rf .a.txt.swp

优先级控制:
nice值 -20 ~ 19 越小优先级越高 普通用户0-19
nice 
作用:以什么优先级运行进程 。默认优先级是0
语法: nice -n 优先级数字

[root@localhost ~]# nice -n -5 vim a.txt

[root@localhost ~]# 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@localhost ~]# 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@localhost ~]# renice -n 5 40168
35281 (process ID) old priority 0, new priority 5

了解:
前后台进程切换:
任务:nohup 如何创建一个后台指令
jobs 列出所有的后台进程
[root@localhost ~]# vim b.txt &
[2] 40281
[root@localhost ~]# jobs
[1]- Stopped nice -n -5 vim a.txt
[2]+ Stopped vim b.txt

fg把后台进程调到前台
[root@localhost ~]# fg 2

free 查看系统内存使用状况
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 3937 613 2606 10 717 2999
Swap: 2047 0 2047

buffers #缓存从磁盘读出的内容
cached #缓存需要写入磁盘的内容
[root@localhost ~]# dd if=/dev/zero of=/a.txt count=10 bs=100M

清空缓存
reboot

[root@localhost ~]# echo 3 > /proc/sys/vm/drop_caches
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 3937 561 3194 10 181 3174
Swap: 2047 0 2047








本文转自信自己belive51CTO博客,原文链接:http://blog.51cto.com/11638205/2048799 ,如需转载请自行联系原作者


你可能感兴趣的:(进程管理)