linux系统管理初学者指南 基于centos 7.6下载_centos查看运行的进程

2022-10-03 14:59:07 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

目录

一、进程概念

1.进程组成部分:

2.僵尸进程:

3.线程:

4.上下文切换:

5.中断处理:

6.进程的属性

二、ps查看进程工具

1.-aux弹出消息及详解

2、linux进程有5种基本状态

三、free 查看内存使用情况

1.弹出消息及详解:

三、uptime 查看系统负载

1.弹出消息含意如下:

四、top 命令 动态性能分析工具

1.每行信息

2.top 快捷键:

五、lsof 命令 用于查看你进程调用、打开的文件

六、kill 关闭进程

1)kill信号

2.killall 命令 (关闭一类进程)

3.pkill 命令 (关闭一类进程)

七、前后台进程切换

1.前台进程:

2.后台进程:

3.跟系统任务相关的几个命令:

1.进程的优先级管理

1)nice(调整优先级)

2)renice(改变运行中程序的优先级)

2.screen 终端复用工具

附:常用 screen 参数


一、进程概念

1.进程组成部分:

• 已分配内存的地址空间;以页为单位

• 进程 ID;

• 程序的代码;

• 进程状态;

单个cpu情况下多个进程要到cpu上运行。进程在cpu上运行的时间叫做时间片

进程管理包括进程调度、中断处理、信号、进程优先级、进程切换、进程状态、进程内存等等。

下图所示的是进程的生命周期:

描述如下:

父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。

每个新进程分配一个唯一的进程 ID (PID),满足跟踪安全性之需。

PID 和 父进程 ID (PPID)是子进程环境的元素,任何进程都可以创建子进程。

所有进程都是第一个系统进程的后代。

centos5 或 6PID 为 1 的进程是:init

centos7 PID 为 1 的进程是:systemd

2.僵尸进程:

不执行代码,占用内存地址空间

当一个进程接收到终止信号时,它结束之前需要一段时间来结束所有任务。

在进程执行所有代码之后,它将相关终止报告发给父进程。

父进程正常情冴下会移除所有子进程的数据结构。

如果父进程没能接收子进程退出信号,那么子进程变为僵尸进程。

所以通常在很短的某个时刻内它是一个僵尸进程。

使用 kill 命令是不能杀死僵尸进程的,因为它已经被认定为死亡了。

可以尝试杀死僵尸进程的父进程,僵尸进程会随之消失。

如果一个进程为僵尸状态,父进程是 init 或 systemd 那么需要重启系统来解决问题。

3.线程:

线程是进程中产生的一个执行单元,在同一个进程中不其他线程并行运行。

线程之间可以共享资源,比如内存、地址空间、打开文件等。

4.上下文切换:

在处理器执行期间,运行进程的信息被存储在处理器的寄存器和高速缓存中。

执行的进程被加载到寄存器的数据被称为上下文。

在实际处理器运行过程中,先存储运行进程的上下文。

然后将下一个要运行的进程的上下文恢复到寄存器,这个过程称之为上下文切换。

一般不能有太多上下文切换。

因为处理器每次要刷新寄存器和高速缓存,以便释放空间给新进程,可能导致性能下降。

5.中断处理:

中断是优先级最高的任务之一。

通常由 I/O 产生,比如网络接口、键盘、磁盘控制器等。

当一个中断信号到达内核的时候,内核必须从当前执行的进程切换到一个新的进程,以便处理这个中断。

这意味着中断会导致上下文切换。也就是说大量中断会导致性能下降。

注意:在 Linux 当中有两种类型的中断。硬中断和软中断。

硬中断是由硬件产生的,需要快速响应(比如:磁盘 IO 中断、键盘中断、鼠标中断等)

软中断被用来处理可以推迟的任务(TCP/IP、SCSI 协议操作等)。

6.进程的属性

进程 ID(PID):是唯一的数值

父进程的 ID(PPID)

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

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

进程执行的优先级

进程所连接的终端名

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

二、ps查看进程工具

ps 查看进程工具

常用的参数:

a: 显示跟当前终端关联的所有进程

u: 基于用户的格式显示

x: 显示所有进程,不以终端机来区分

常用的选项组合是 ps -aux

1.-aux弹出消息及详解

【】# ps -axu | more

注: 最后一列[xxxx] 使用方括号括起来的进程是内核态的进程,没有括起来的是用户态进程。

上面的参数输出每列含意:

USER: 启动这些进程的用户

PID: 进程的 ID

%CPU 进程占用的 CPU 百分比;

%MEM 占用内存的百分比;

VSZ:进程占用的虚拟内存大小(单位:KB)

RSS:进程占用的物理内存大小(单位:KB)

STAT:该程序目前的状态,

2、linux进程有5种基本状态

R :该程序目前正在运作,或者是可被运作;

S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。

T :该程序目前正在侦测或者是停止了;

Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态

D 不可中断状态,通常存在于 I/O 情冴下。

5 个基本状态后,还可以加一些字母,比如:Ss、R ,如下图:

它们含意如下::

<: 表示进程运行在高优先级上

N: 表示进程运行在低优先级上

L: 表示进程有页面锁定在内存中

s: 表示进程是控制进程

l: 表示进程是多线程的

: 表示当前进程运行在前台

START:该进程被触发启动的时间;

TIME :该进程实际使用 CPU 运作的时间。

COMMAND:该程序的实际指令

例 1: 查看进程状态

【】# vim a.txt

在另一个终端执行:

【】# ps -aux | grep a.txt #查看状态 S 表示睡眠状态, 表示前台

root 4435 0.0 0.2 151752 5292 pts/1 S 20:52 0:00 vim a.txt

root 4661 0.0 0.0 112676 996 pts/0 S 21:05 0:00 grep –color=auto a.txt

在 vim a.txt 这个终端上 按下: ctrl z

[1] 已停止 vim a.txt

在另一个终端执行:

【】# ps -aux | grep a.txt #查看状态 T 表示停止状态

root 4435 0.0 0.2 151752 5292 pts/1 T 20:52 0:00 vim a.txt

root 4675 0.0 0.0 112676 996 pts/0 S 21:05 0:00 grep –color=auto a.txt

注:

ctrl-c 是发送 SIGINT 信号,终止一个进程

ctrl-z 是发送 SIGSTOP 信号,挂起一个进程。将作业放置到后台(暂停)

ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。代表输入完成或者注销

例 2: D 不可中断状态

【】# tar -zcvf usr-tar.gz /usr/

#然后在另一个终端不断查看状态,由 S ,R 变为 D

ps 常用的参数: ps -ef

-e 显示所有进程

-f 显示完整格式输出

2.-ef弹出消息及详解

包含的信息如下:

UID: 启动这些进程的用户

PID: 进程的 ID

PPID: 父进程的进程号

C: 进程生命周期中的 CPU 利用率

STIME: 进程启动时的系统时间

TTY: 表明进程在哪个终端设备上运行。如果显示 ?表示不终端无关,这种进程一般是内核态进程。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等,则表示运行在虚拟终端上的进程。

TIME: 运行进程一共累计占用的 CPU 时间

CMD: 启动的程序名称

例 1:测试 CPU 使用时间。

dd if=/dev/zero of=/a.txt count=10 bs=100M

[root@localhost ~]# ps -axu | grep dd

三、free 查看内存使用情况

[root@localhost ~]# free -m

1.弹出消息及详解:

total used free shared buff/cache available

Mem: 972 603 69 24 299 123

Swap: 2047 69 1978

其中:

第一行:total 是总内存量,used 是已经使用的内存量,free 是空闲的内存,shared 是多个进程共享的内存总数,buffers 是缓冲内存数,cached 是缓存内存数。默认单位是 KB。

第二行开始:

total 系统中有 972MB 的物理内存,

used 是已经使用的内存数量。

free 是空闲的内存数量。shared 是多个进程共享的内存数量。

buff/cache 用来作为缓冲和缓存的空间,内核会在内存将要耗尽时释放这部分内存给其他进程使用。

availble:可使用空间,评估有多少内存可用于启动新应用程序。

available 字段考虑了页缓存,而不是所有可回收的内存。

正因为这个原因所以通常 free buff/cache 的数值要比 available 的数值大。

第三行为 swap 虚拟内存。

在上面信息中我们可以看到,其实系统上并没有运行什么服务。但是有 299 的 cache,这是因为在实验过程中进行过多次读写执行等操作。这些文件会被系统暂时缓存下来,以便下次运行的时候能够快速的读取。这种使用都是正常的情冴,说明物理内存正在被合理的使用。但是如果我们发现 swap 区域一直被大量使用,这就说明物理内存不足。可能需要考虑系统上 swap 使用比例或者添加物理内存。

三、uptime 查看系统负载

uptime 查看 CPU 负载工具

【】# uptime

13:22:30 up 20days, 2 users, load average: 0.06, 0.60, 0.48

1.弹出消息含意如下:

任务队列的平均长度是什么?

大厅排除买票:

这时队列是 4:

cpu 队列数为 3 时,如图:

例 1:找出前当系统中,CPU 负载过高的服务器?

服务器 1: load average: 0.15, 0.08, 0.01 1 核

服务器 2: load average: 4.15, 6.08, 6.01 1 核

服务器 3: load average: 10.15, 10.08, 10.01 4 核

如果服务器的 CPU 为 1 核心,则 load average 中的数字 >=3 负载过高,如果服务器的 CPU 为 4 核心, 则 load average 中的数字 >=12 负载过高。

经验:单核心,1 分钟的系统平均负载不要超过 3,就可以,这是个经验值。

如下图: 1 人只能买 1 张票,排第四的人可能会急。 所以我们认为超过 3 就升级 CPU

四、top 命令 动态性能分析工具

[root@localhost ~]# top #top 弹出的每行信息含意如下:

1.每行信息

第一行内容和 uptime 弹出的信息一样进程和 CPU 的信息( 第二、三行)

当有多个 CPU 时,这些内容可能会超过两行。内容如下:

Tasks: 481 total

进程总数

1 running

正在运行的进程数

480 sleeping

睡眠的进程数

0 stopped

停止的进程数

0 zombie

僵尸进程数

Cpu(s): 0.0% us

系统用户进程使用 CPU 百分比。

0.0% sy

内核中的进程占用 CPU 百分比

0.0% ni

用户进程空间内改变过优先级的进程占用 CPU 百分比

98.7% id

空闲 CPU 百分比

0.0% wa

cpu 等待 I/0 完成的时间总量。 测试: 终端 1:执行:top 终端 2:dd if=/dev/zero of=/a.txt count=10 bs=100M 终端 3:dd if=/dev/zero of=/a.txt count=10 bs=100M 如下:

0.0% hi 硬中断消耗时间

硬中断,占的 CPU 百分比。1. 硬中断是由硬件产生的,比如,像磁盘, 网卡,键盘,时钟等。

0.0% si 软中断消耗时间

软中断,占的 CPU 百分比。硬中断是由硬件设备产生,需要快速响应。 软中断被用来处理可以推迟的任务(如 TCP/IP 操作,SCSI 协议)。

0.0 st (steal 偷)

st:虚拟机偷取物理的时间。比如:物理机已经运行了 KVM,XEN 虚 拟机。KVM 虚拟机占用物理机的 cpu 时间

内存信息(第四五行)

内容如下:

Mem: 2033552k total

使用的物理内存总量

1376636k free

空闲内存总量

316524k buff/cache

用作内核缓存的内存量。 和 free -k 一个意思

Swap: 2017948k total

交换区总量

0k used

使用的交换区总量

192772k free

空闲交换区总量

注:如果 swap 分区,被使用,那么你的内存不够用了。

第 7 行进程信息

列名

含义

PID

进程id

USER

进程所有者的用户名。

PR

优先级(由内核动态调整),用户不能修改。

NI

进程优先级。 nice 值。负值表示高优先级,正值表示低优先级,用户可以 自己调整。

VIRT(virtual memory usage)

虚拟内存,是进程正在使用的所有内存(ps 中标为 VSZ) VIRT:virtual memory usage 虚拟内存 1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等 2、假如进程申请 100m 的内存,但实际只使用了 10m,那么它会增长 100m,而不是实际的使用量

RES(resident memory usage)

是进程所使用的物理内存。实际实用内存(ps 中标为 RSS) RES:resident memory usage 常驻内存 1、进程当前使用的内存大小,但不包括 swap out 2、包含其他进程的共享 3、如果申请 100m 的内存,实际使用 10m,只增长 10m,不 VIRT 相反 4、关于库占用内存的情冴,它只统计加载的库文件所占内存大小

SHR

共享内存大小,单位 kb SHR:shared memory 共享内存 1、除 M 了自身进程的共享内存,也包括其他进程的共享内存 2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小 3、计算某个进程所占的物理内存大小公式:RES – SHR 4、swap out 后,它将会降下来

S

进程状态。 D=不可中断的睡眠状态 R=运行中或可运行 S=睡眠中 T=已停止 Z=僵停

%CPU

上次更新到现在的 CPU 时间占用百分比

%MEM

进程使用的物理内存百分比

TIME

进程使用的 CPU 时间总计,单位 1/100 秒

COMMAND

命令名/命令行

2.top 快捷键:

默认 3s 刷新一次,按 s 修改刷新时间

按空格 :立即刷新。

q 退出

P:按 CPU 排序

M:按内存排序

T 按时间排序

p: 进程 IP,查看某个进程状态

数字键 1:显示每个内核的 CPU 使用率

u/U:挃定显示的用户

h:帮助

例 1:使用 TOP 动态只查看某个或某些进程的信息

找到进程 ID

[root@localhost ~]# ps -axu | grep vim

Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.8/FAQ

root 9667 0.0 0.2 143620 3344 pts/1 S< 19:15 0:00 vim a.txt

[root@localhost ~]# top -p 9667

10.2.3 实戓 1:找出系统中使用 CPU 最多的进程

运行 top , 找出使用 CPU 最多的进程 ,按大写的 P,可以按 CPU 使用率来排序显示

在 linux 系统中一个进程,最多可以使用 100%cpu 对吗? 不对,因为多个cpu,有几个就是百分之几百

如下图,可以看到 dirtycow(脏牛漏洞,用于提权) 进程使用 196.8%

五、lsof 命令 用于查看你进程调用、打开的文件

lsof 命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)

-i<条件>:列出符合条件的进程,ipv4 或 ipv6。(4、6、协议、:端口、 @ip )

-p<进程号>:列出挃定进程号所打开的文件;

例:

[root@localhost ~]# vim a.txt

[root@localhost ~]# ps -axu | grep a.txt

root 43641 0.8 0.2 151744 5280 pts/3 S 18:19 0:00 vim a.txt

root 43652 0.0 0.0 112676 996 pts/1 S 18:19 0:00 grep –color=auto a.txt

[root@localhost ~]# lsof -p 43641 #一般用于查看进程,在读哪些文件

[root@localhost ~]# lsof -i :22 #用于查看端口,或查看开启端口是哪个进程在使用

六、kill 关闭进程

关闭进程 3 个命令:kill killall pkill

kill 关闭进程:kill 进程号 关闭单个进程

killall 和 pkill 命令用于杀死指定名字的进程

通过信号的方式来控制进程的

kill -l =====> 列出所有支持的信号

1)kill信号

信号编号 信号名

1) SIGHUP 重新加载配置

2) SIGINT 键盘中断 crtl c

3) SIGQUIT 退出

9) SIGKILL 强制终止

15) SIGTERM 终止(正常结束),缺省信号

18) SIGCONT 继续

19) SIGSTOP 停止

20) SIGTSTP 暂停 crtl z

1.kill 命令 (关闭单个进程)

root@localhost ~]# ps aux | grep sshd

[root@localhost ~]# kill -1 3017

[root@localhost ~]# vim test.sh

[root@localhost ~]# ps aux | grep “vim” | grep -v “grep”

root 3037 0.0 0.3 143968 3608 pts/1 S 03:25 0:00 vim test.sh

[root@localhost ~]# kill -19 3037

[root@localhost ~]# ps aux | grep “vim” | grep -v “grep”

root 3037 0.0 0.3 143968 3608 pts/1 T 03:25 0:00 vim test.sh

2.killall 命令 (关闭一类进程)

kill [子选项][信号] 进程名

选项:-i:交互式,询问是否要杀死某个进程。

交互式杀死 sshd 进程:

[root@localhost ~]# killall -i sshd #交互式杀死 sshd 进程。

3.pkill 命令 (关闭一类进程)

pkill 命令和 killall 命令非常相似,也是按照进程名来杀死进程。

pkill [选项][信号] 进程名

选项:

-t 终端号:按照终端号踢出用户。

七、前后台进程切换

– nice 进程优先级-实战 screen 后台执行命令

Linux 后台进程不前台进程的区别

1.前台进程:

是在终端中运行的命令,那么该终端就为进程的控制终端,一旦这个终端关闭,这这个进程也随着消失

2.后台进程:

其中有一类后台进程也叫守护进程(Daemon)。

是运行在后台的一种特殊进程,不受终端控制,它不需要终端的交互。

Linux 的大多数服务器就是用守护进程实现的。比如,Web 服务器 httpd 等。

进程的前台与后台运行

3.跟系统任务相关的几个命令:

ctrl z

&

jobs

fg

bg

命令

功能

&

用在一个命令的最后,可以把这个命令放到后台执行.

ctrl z

将一个正在前台执行的命令放到后台,并且暂停.

jobs

查看当前有多少在后台运行的进程.它是一个作业控制命令

fg (foreground process)

将后台中的命令调至前台继续运行, 如果后台中有多个命令,可以 用 fg %jobnumber 将选中的命令调出,%jobnumber 是通过 jobs 命令查到的后 台正在执行的命令的序号(从是 pid)

bg(backgrou nd process)

将一个在后台暂停的命令,变成继续执行; 如果后台中有多个命令,可以用 bg %jobnumber 将选中的命令调出,%jobnumber 是通过 jobs 命令查到的后台 正在执行的命令的序号(不是 pid)

nohup:放到后台不依赖终端

用法【】bohup [命令] &

恢复被挂起的进程

例: vim a.txt 按下: ctrl z

【】# vim a.txt #打开后,然后执行 ctrl z

1] 已停止 vim a.txt

【】# ps -axu | grep vim

root 43710 0.8 0.2 151744 5304 pts/3 T 18:26 0:00 vim a.txt

root 43720 0.0 0.0 112676 984 pts/3 S 18:26 0:00 grep –color=auto vim

【】# jobs #查看当前有多少在后台运行的进程

[1] 已停止 vim a.txt

【】# fg 1 #将后台挂起的进程恢复到前台运行

1.进程的优先级管理

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

1)nice(调整优先级)

命令 1:nice -n 挃定程序的运行优先级

格式:nice n command

2)renice(改变运行中程序的优先级)

命令 2:renice 改变程序的运行优先级

格式:renice -n pid

2.screen 终端复用工具

使用 screen 后台实时执行命令备份命令

实战场景:公司晚上需要备份大量数据,我在 xshell 上直接执行备份脚本可以吗?

或直接运行脚本 & 放到后台运行可以吗?

当关了 xshell 后,back.sh & 还在后台执行吗?

3.6 screen 概述和安装

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

安装 screen 软件包

# rpm -ivh /mnt/Packages/screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm

或者

【】# yum -y install screen

screen 使用方法

直接在命令行键入 screen 命令回车,如下图

【】# screen

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

例如,我们在做某个大型的操作但是突然之间断开:

实战:使用 screen 后台实时执行命令备份命令

【】# screen #进入

【】# vim a.txt #执行命令, 或执行你自己需要运行的备份命令

此时想离开一段时间,但还想让这个命令继续运行

【】# #在 screen 当前窗口键入快捷键 Ctrl a d

[detached from 44074.pts-3.localhost] #分离出来独立的一个会话

半个小时之后回来了,找到该 screen 会话:

【】# screen -ls #查看已经建立的会话 ID

There is a screen on:

44074.pts-1.tivf06 (Detached)

1 Socket in /tmp/screens/S-root.重新连接会话:

【】# screen -r 44074

【】# exit #不想使用 screen 会话了,执行:exit 退出。

注意:exit退出后是彻底关闭会话,再进入无会话,需要重新再次建立

附:常用 screen 参数

screen -S test -> 新建一个叫 test 的会话

screen -ls -> 列出当前所有的会话

screen -r test -> 回到 test 会话

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/197354.html原文链接:https://javaforall.cn

0 人点赞