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.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- (Unicode) line drawing characters
-V, --version display version information
-Z,
--security-context show SELinux security contexts
PID start at this PID; default is (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.21.20120314git3c2946.el7.x86_64.rpm
warning: /mnt/Packages/screen-4.1.-0.21.20120314git3c2946.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ################################# [%]
Updating / installing...
:screen-4.1.-0.21.20120314git3c29################################# [%]
[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

最新文章

  1. session的工作原理
  2. jQuery EasyUI API 中文文档 - ValidateBox验证框
  3. [大坑]FFT学习
  4. STC12C5A60S2 常用的中断源和相关寄存器
  5. Builder(生成器)-对象创建型模式
  6. 深入理解UIApplication和ios程序启动过程
  7. WIN7 64位系统下的服务程序更新失败问题解决
  8. 【转载】.NET程序员走向高端必读书单汇总
  9. xmlns与targetNamespace
  10. 配置IIS应用程序池
  11. MVC&amp;WebForm对照学习:文件下载
  12. OpenStack Havana 部署在Ubuntu 12.04 Server 【OVS+GRE】(一)——控制节点的安装
  13. MyCat 主键ID自增长配置
  14. POJ——位查询
  15. C#常见数据格式导出
  16. PHP PSR 代码风格
  17. 【LINUX】主进程、父进程、子进程、守护进程的概念
  18. QQ顶部的消息,联系人切换
  19. Android开发之漫漫长途 Ⅰ——Android系统的创世之初以及Activity的生命周期
  20. yaf框架学习文件配置

热门文章

  1. 基于bootstrap metronic-responsive-admin-dashboard-template 开发管理后台
  2. 如何使用iClap进行产品管理?
  3. intellij-idea+maven搭建scala环境
  4. eclipse上的.properties文件中文编辑显示处理
  5. 重定向符号和tee命令区别
  6. LINUX SHELL 笔记 01: 脚本
  7. web.xml&lt;context-param&gt;与&lt;init-param&gt;的作用与区别
  8. tab标签 插件 by 腾讯 jianminlu
  9. 20135302魏静静——linux课程第七周实验及总结
  10. 20135302魏静静——linux课程第八周实验及总结