1-10 RHLE7 系统进程管理

1.1-Linux进程管理

程序、进程、线程

程序:一组指令的集合    QQ

进程:程序的执行就是进程。也可以把进程看成一个独立的程序,
在内存中有其对应的代码空间和数据空间,一个进程所拥有的数据和代码只属于自己。
进程是资源分配的基本单位,也是调度运行的基本单位。

线程:线程被人们认为是轻量级的进程,它是进程中单独运行的程序。
换句话说,就是一个进程可以包含多个线程,并且至少有一个主线程,
同时同一进程的线程共享该进程的代码和数据。

程序和进程的区别
1、程序是静态的,它只是一组指令的集合,不具有任何的运行意义。
     而进程是程序运行的动态过程.
2、进程和程序并不是一一对应的关系,
     相同的程序运行在不同的数据集上就是不同的进程。
3、进程还具有并发性和交往性,而程序却是封闭的。

进程和线程的区别
1、一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有。
2、线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口。
     它必须组成进程才能被执行。

1.1-2进程的属性:
进程ID(PID):是唯一的数值,用来区分进程;

父进程的ID(PPID);

启动进程的用户ID(UID)和所归属的组(GID);

进程状态:状态分为运行R、休眠S、僵尸Z;

进程执行的优先级;数值越小,优先级越高,取值在-20~19

进程所连接的终端名;

进程资源占用:比如占用资源大小(内存、CPU占用量);

对于Linux进程的管理,是通过进程管理工具实现的,比如ps、kill、工具
================================================

 

 

1.2 ps top pgrep pstree netstat工具的使用方式

1.2.1 ps命令:监视进程工具(静态的static)
ps - report a snapshot of the current processes.

ps命令有三种显示选项:
分别是
UNIX 选项  需要使用一个破折号-,可以组合使用
BSD选项    可以不使用破折号-,可以组合   ps aux / ps -aux 
            会显示进程的状态,和命令
GNU长选项  需要两个破折号--

ps是查看进程用的最普遍的命令,(注ps不是photoshop)
常用选项:
-a 显示所有用户进程
-u 显示用户名和启动时间
-x 显示没有控制终端的进程
-e 显示所有进程(包括没有终端的进程)
-l  长格式输出显示的进程
-w 加宽显示,可使用多个w
显示所有进程命令:
ps -aux     #是用BSD的格式来显示进程
ps -el         #是用标准的格式显示进程

这两条命令,可使用管道,配合 more ,less 或 grep使用
[root@xiaogan ~]# ps -aux | grep sshd
[root@xiaogan ~]# ps -aux | grep httpd

 


查看隶属于自己进程详细信息
[root@xiaogan ~]# ps -l
[root@xiaogan ~]# ps -u

 

ps  -aux 输出的解释:

USER  启动该进程的用户
PID    进程的ID,数值唯一,可通过进程号对其进行各种操作
%CPU  占用CPU的时间比
%MEM  占用内存的百分比
VSZ      占用虚拟内存大小
RSS       缓存大小?!
NI        进程的优先级
TTY        进程连接的终端名
STAT     进程的状态
START   进程的启动时间
TIME     进程占用CPU的总时间
COMMAND  进程的命令名
================================================

1.2.2 top命令:动态显示进程信息
top - display Linux processes
前五行数据解释:


任务队列信息-->第一行:
top - 19:36:08 up  2:37,  2 users,  load average: 0.00, 0.01, 0.05
top--> 命令名
19:36:08-->当前时间19:36:08
up 2:37-->系统启动时间,  
2 users-->有两个登录用户,  
load average: 0.00, 0.01, 0.05-->系统负载,
                                  即任务队列的平均长度。
                                  三个数值分别为1分钟、5分钟、15分钟前到现在的平均值


进程和CPU的信息-->第二行、第三行:
Tasks: 519 total,   1 running, 518 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.8 us,  0.7 sy,  0.0 ni, 98.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
Tasks: 519 total-->进程总数519个
1 running, -->正在运行的进程数1个
518 sleeping,   -->睡眠的进程数
0 stopped,   -->停止的进程数
0 zombie-->僵尸进程数
%Cpu(s):  0.8 us,  -->系统用户进程使用CPU百分比
0.7 sy,  -->内核中的进程使用CPU百分比
0.0 ni, -->用户进程空间内改变过优先级的进程占用CPU百分比
98.5 id,  -->空闲CPU百分比
0.0 wa,  0.0 hi,  0.0 si,  0.0 st


内存和交换分区的信息-->第四行第五行
KiB Mem :  2033556 total,   594904 free,   623056 used,   815596 buff/cache
KiB Swap:  4194300 total,  4194300 free,        0 used.  1158976 avail Mem
KiB Mem :  2033556 total,-->物理内存总量
594904 free,-->空闲的内存总量
623056 used,-->使用的物理内存总量
815596 buff/cache-->用作内核缓存的内存辆。和free -k 一个意思
KiB Swap:  4194300 total,-->交换区总量
4194300 free,-->空闲的交换区总量
0 used.-->使用的交换区总量
1158976 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排序

================================================


1.2.3 使用pgrep管理工具
作用:查找服务进程号
语法格式:pgrep  [服务名称]
[root@xiaogan ~]# pgrep httpd
[root@xiaogan ~]# pgrep sshd

 

[root@xiaogan ~]# pgrep --help

Usage:
pgrep [options] <pattern>

Options:
-d, --delimiter <string>  specify output delimiter
-l, --list-name          list PID and process name
-a, --list-full          list PID and full command line
-v, --inverse            negates the matching
-w, --lightweight        list all TID
-c, --count              count of matching processes
-f, --full                use full process name to match
-g, --pgroup <PGID,...>  match listed process group IDs
-G, --group <GID,...>    match real group IDs
-n, --newest              select most recently started
-o, --oldest              select least recently started
-P, --parent <PPID,...>  match only child processes of the given parent
-s, --session <SID,...>  match session IDs
-t, --terminal <tty,...>  match by controlling terminal
-u, --euid <ID,...>      match by effective IDs
-U, --uid <ID,...>        match by real IDs
-x, --exact              match exactly with the command name
-F, --pidfile <file>      read PIDs from file
-L, --logpidfile          fail if PID file is not locked
--ns <PID>                match the processes that belong to the same
                          namespace as <pid>
--nslist <ns,...>        list which namespaces will be considered for
                          the --ns option.
                          Available namespaces: ipc, mnt, net, pid, user, uts

-h, --help    display this help and exit
-V, --version  output version information and exit

For more details see pgrep(1).

 

======================================================


1.2.4 pstree工具使用
pstree命令以树状图显示进程间的关系(display a tree of processes)。
格式:pstree
以树状图显示进程,只显示进程的名字,且相同进程合并显示。
格式:pstree -p
以树状图显示进程,还显示进程PID。

[root@xiaogan ~]# pstree --help
pstree: unrecognized option '--help'
Usage: pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -g ] [ -u ]
              [ -A | -G | -U ] [ PID | USER ]
      pstree -V
Display a tree of processes.

  -a, --arguments    show command line arguments
  -A, --ascii        use ASCII line drawing characters
  -c, --compact      don't compact identical subtrees
  -h, --highlight-all highlight current process and its ancestors
  -H PID,
  --highlight-pid=PID highlight this process and its ancestors
  -g, --show-pgids    show process group ids; implies -c
  -G, --vt100        use VT100 line drawing characters
  -l, --long          don't truncate long lines
  -n, --numeric-sort  sort output by PID
  -N type,
  --ns-sort=type      sort by namespace type (ipc, mnt, net, pid, user, uts)
  -p, --show-pids    show PIDs; implies -c
  -s, --show-parents  show parents of the selected process
  -S, --ns-changes    show namespace transitions
  -u, --uid-changes  show uid transitions
  -U, --unicode      use UTF-8 (Unicode) line drawing characters
  -V, --version      display version information
  -Z,
  --security-context  show SELinux security contexts
  PID    start at this PID; default is 1 (init)
  USER  show only trees rooted at processes of this user

 

pstree

 

pstree -p

 

======================================================

 

1.2.5 netstat工具的使用

作用:打印网络连接、路由表、接口统计等
Print network connections, routing tables, interface statistics, masquerade connections, and mul‐ticast memberships
参数:常用:
-a或–all 显示所有连接中的接口。
-c或–continuous 持续列出网络状态。
-C或–cache 显示路由器配置的快取信息。
-e或–extend 显示网络其他相关信息。
-F或–fib 显示FIB。
        -g或–groups 显示多重广播功能群组组员名单。
-h或–help 在线帮助。
-i或–interfaces 显示网络界面信息表单。
-l或–listening 显示监控中的服务器的接口。
-M或–masquerade 显示伪装的网络连线。
-n或–numeric 直接使用IP地址,而不通过域名服务器。
-N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
-o或–timers 显示计时器。
-p或–programs 显示正在使用接口的程序识别码和程序名称。
-r或–route 显示Routing Table。
-s或–statistice 显示网络工作信息统计表。
-t或–tcp 显示TCP传输协议的连接状况。
-u或–udp 显示UDP传输协议的连接状况。
-v或–verbose 显示指令执行过程。
-V或–version 显示版本信息。
-w或–raw 显示RAW传输协议的连线状况。
-x或–unix 此参数的效果和指定”-A unix”参数相同。
–ip或–inet 此参数的效果和指定”-A inet”参数相同。

显示所有tcp连接
[root@xiaogan ~]# netstat -anlpt

 

显示所有UDP连接
[root@xiaogan ~]# netstat -anlpu

 

查看某个服务的端口:
[root@xiaogan ~]#nestat -anlpt | grep httpd

 

 

====================================================

1-3. 虚拟文件系统  /proc 、 /sys

Linux一切皆文件,设备(文件)可以通过读写来操作;

/proc是内存中有关系统进程的信息;
/sys是有关系统内核以及驱动的信息;

 

cat /proc/cpuinfo
//查看当前CPU信息

#开启内核转发功能
[root@xiaogan ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@xiaogan ~]# cat /proc/sys/net/ipv4/ip_forward
1
[root@xiaogan ~]#

 


====================================================


1.4- LINUX后台进程与前台进程

LINUX后台进程与前台进程的区别
Linux后台进程:
也叫守护进程(Daemon),是运行在后台的一种特殊进程。
守护的意思就是不受终端控制。Linux的大多数服务器就是用守护进程实现的。
比如,Web服务器httpd等。
Linux前台进程:
用户使用的有控制终端的进程.

进程的前台与后台运行
跟系统任务相关的几个命令:fg、bg、jobs、&、ctrl+z
        :用在一个命令的最后,可以把这个命令放到后台执行.
 ctrl + z: 将一个正在前台执行的命令放到后台,并且暂停.
jobs:查看当前有多少在后台运行的进程.
fg: 将后台中的命令调至前台继续运行  
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
bg :将一个在后台暂停的命令,变成继续执行
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

实战:恢复被挂起的进程
[root@xiaogan ~]# vim a.txt

[1]+  Stopped                vim a.txt
[root@xiaogan ~]# jobs
[1]+  Stopped                vim a.txt
[root@xiaogan ~]# fg
vim a.txt
[root@xiaogan ~]#

 

kill进程的终止


控制(关闭)进程:
kill用法 关闭进程:kill  [进程号]
通过信号的方式来控制进程
[root@xiaogan ~]#  kill -l  #查看可用的信号

 

杀死进程:
[root@xiaogan ~]# kill -9 5873
[root@xiaogan ~]# kill -s 9 5873

 

杀死全部进程:killall
[root@xiaogan ~]# killall httpd

 

====================================================


1.5-进程的优先级管理
进程的优先级的定义

优先级取值范围为(-20,19)
越小优先级越高, 默认优先级是0

nice指定程序的运行优先级

使用top命令查看优先级

    作用:指定程序的运行优先级

    格式:nice -n command
实战:
nice -n 5 vim a.txt
输入内容
ctrl+z 挂起(执行很快,挂起能够看到pid)
ps -aux | grep vim
top -p pid查看

将vim进程挂起,并查看其PID:

 

使用top -p PID 查看VIM优先级

 

 

使用renice n -pid PID命令,设置进程优先级,并查看

 

使用nice命令,直接设置即将运行的命令的优先级,并查看

 

 

====================================================


1.6-文件控制台的窗口管理

screen 实战后台实时执行命令
1、安装screen软件包
[root@xiaogan ~]#rpm -ivh /mnt/Packages/screen-4.1.0-0.21.20120314git3c2946.el7.x86_64.rpm
或者
[root@xiaogan ~]# yum -y install screen

[root@xiaogan ~]# which screen
/usr/bin/which: no screen in (/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin)
[root@xiaogan ~]# rpm -ivh /mnt/Packages/screen-4.1.0-0.21.20120314git3c2946.el7.x86_64.rpm
warning: /mnt/Packages/screen-4.1.0-0.21.20120314git3c2946.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
  1:screen-4.1.0-0.21.20120314git3c29################################# [100%]
[root@xiaogan ~]# which screen
/usr/bin/screen
[root@xiaogan ~]#

 

Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。
直接在命令行键入screen命令
screen

 


Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样。

在该窗口中键入exit退出该窗口,
Screen命令后跟你要执行的程序。
screen vim xuegod.sh

Screen创建一个执行vim xuegod.sh的单窗口会话,退出vi将退出该窗口/会话。

 

进入screen
vim 执行操作
以上两种方式都创建新的screen会话。
我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中Ctrl键+a键,之后再按下c键,screen 在该会话内生成一个新的窗口.


screen还有更高级的功能。你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。
例如,我们在做某个大型的操作但是突然之间断开:
(常用在远程连接某服务器时,我们可以使用screen命令,执行需要等待时间很长的操作,若中间远程连接断开,不影响这个操作的执行)


实战:
screen  进入
执行updatedb
模拟中断
模拟假设突然会话断开
那么在screen窗口键入Ctrl+a+d ,Screen会给出detached提示:
(只要不输入exit,而造成的退出,都可以重连)
暂时中断会话

 

怎样找到该screen会话,继续操作呢?
screen -ls
查看id

重新连接会话:
screen -r id

 

posted @ 2016-08-14 01:26  小甘丶  阅读(440)  评论(0编辑  收藏  举报