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使用
[[email protected] ~]# ps -aux | grep sshd
[[email protected] ~]# ps -aux | grep httpd
查看隶属于自己进程详细信息
[[email protected] ~]# ps -l
[[email protected] ~]# 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 [服务名称]
[[email protected] ~]# pgrep httpd
[[email protected] ~]# pgrep sshd
[[email protected] ~]# 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。
[[email protected] ~]# 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连接
[[email protected] ~]# netstat -anlpt
显示所有UDP连接
[[email protected] ~]# netstat -anlpu
查看某个服务的端口:
[[email protected] ~]#nestat -anlpt | grep httpd
====================================================
1-3. 虚拟文件系统 /proc 、 /sys
Linux一切皆文件,设备(文件)可以通过读写来操作;
/proc是内存中有关系统进程的信息;
/sys是有关系统内核以及驱动的信息;
cat /proc/cpuinfo
//查看当前CPU信息
#开启内核转发功能
[[email protected] ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
1
[[email protected] ~]#
====================================================
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)
实战:恢复被挂起的进程
[[email protected] ~]# vim a.txt
[1]+ Stopped vim a.txt
[[email protected] ~]# jobs
[1]+ Stopped vim a.txt
[[email protected] ~]# fg
vim a.txt
[[email protected] ~]#
kill进程的终止
控制(关闭)进程:
kill用法 关闭进程:kill [进程号]
通过信号的方式来控制进程
[[email protected] ~]# kill -l #查看可用的信号
杀死进程:
[[email protected] ~]# kill -9 5873
[[email protected] ~]# kill -s 9 5873
杀死全部进程:killall
[[email protected] ~]# 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软件包
[[email protected] ~]#rpm -ivh /mnt/Packages/screen-4.1.0-0.21.20120314git3c2946.el7.x86_64.rpm
或者
[[email protected] ~]# yum -y install screen
[[email protected] ~]# which screen /usr/bin/which: no screen in (/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin) [[email protected] ~]# 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%] [[email protected] ~]# which screen /usr/bin/screen [[email protected] ~]#
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