Linux进程管理详细分析

1.进程

1.1.概念

进程是已启动的可执行程序的运行实例

1.2.进程组成部分

  • 已分配内存的地址空间;
  • 安全属性,包括所有权凭据和特权;
  • 程序代码的一个或多个执行线程;
  • 进程状态。

1.3.进程和程序的区别

程序: 二进制文件,静态,例如:/usr/bin/passwd ,/usr/sbin/useradd
进程: 是程序运行的过程,动态,有生命周期及运行状态。
1

1.4.进程和线程的区别(了解)

1.根本区别

  • 进程是操作系统(OS)资源分配的基本单位;
  • 线程是处理器(CPU)任务调度和执行的基本单位。

2.资源开销

  • 每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;
  • 线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

3.包含关系

  • 如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线同完成的;
  • 线程是进程的一部分,所行过程不是一条线的,而是多条线(线耗)其被称为轻权进程或者轻量级进程。

4.内存分配

  • 同一进程的线程共享本进程的空间和资源;
  • 进程之间的地址空间和资源是相互独立的。

5.影响关系

  • 一个进程崩溃后,在保护模式下不会对其他进程产生影响;
  • 一个线程崩溃整个进程都死掉,所以多进程要比多线程健壮。

6.执行过程

  • 每个独立的进程有程序运行的入口、顺序执行序列和程序出口;
  • 线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行。

1.5.进程的生命周期(了解)

父进程复制自己的地址空间(fork)创建一个新的(子)进程结构;每个新进程分配一个,唯一的进程 ID (PID),满足跟踪安全性之需。
任何进程都可以创建子进程;
所有进程都是第一个系统进程的后代:
Centos5/6系统进程: init
Centos7系统进程: systemd
2

1.6.进程状态(了解)

原因:在多任务处理操作系统中,每个CPU(或核心),在一个时间点上只能处理一个进程。
在进程运行时,它对CPU时间和资源分配的要求会不断变化,从而为进程分配一个状态,它随着环境要求而改变。
3
4

2.静态查看进程ps(precess status进程状态)

2.1.ps aux 命令

参数说明:
a 显示现行终端机下的所有程序;
u 以用户为主的格式来显示程序状况;
x 不以终端机来区分。

2.2.ps aux 输出的字段含义:

[root@localhost ~]# ps aux | head  -2
USER	PID	%CPU	%MEM	VSZ		RSS	TTY	STAT	START	TIME	COMMAND
root	1	 0.0 	0.6		128096  6708 ?   Ss     16:20   0:01  /usr/lib/systemd/systemd

字符解释
USER: 运行进程的用户
PID:进程ID(我们云工程师靠PID,杀死他kill)
%CPU: CPU占用率
%MEM: 内存占用率
VSZ:占用虚拟内存
RSS: 占用实际内存
TTY:进程运行的终端
STAT:进程状态(常见:R 运行;S 睡眠 Sleep;T 停止的进程;Z 僵尸进程;X 死掉的进程)
START:进程的启动时间
TIME:进程占用CPU的总时间(分钟:秒)
COMMAND:进程文件,进程名

2.3.进程排序

语法:ps aux --sort %cpu
示例:以CPU占比降序排列(减号是降序)

[root@localhost ~]# ps aux --sort -%cpu
[root@localhost ~]# ps aux --sort %cpu

2.4.进程的父子关系

语法:ps -ef
示例:查看进程的父子关系。 请观察PID和PPID–父进程ID

[root@localhost ~]# ps -ef
UID         PID   PPID  C   STIME     TTY     TIME     CMD
root          1    0    0   122     ?      00:00:07 /usr/lib/systemd/systemd
root          2    0    0   122     ?      00:00:00 [kthreadd]
root          3    2    0   122     ?      00:00:06 [ksoftirqd/0]

2.5.自定义显示字段(了解)

语法: ps axo
示例:

[root@localhost ~]# ps axo user,pid,ppid,%mem,command |head -3

3.动态查看进程top

3.1.上半部分字段说明

1
2
3
4
5

3.2.下半部分字段补充介绍(了解)

VIRT:virtual memory usage 虚拟内存(需要这些内存,但并没有占满。)
RES:resident memory usage 常驻内存(用了多少内存)
SHR:shared memory 共享内存(除了自身进程的共享内存,也包括其他进程的共享内存;共享内存大小公式:RES – SHR)

3.3.top常用内部指令

h|?帮助;
M 按内存的使用排序;
P 按CPU使用排序;
N 以PID的大小排序;
< 向前;>向后;
z 设置彩色,使用数字调整

3.4.top技巧

动态查看进程 top,像windows的任务管理器
[root@localhost ~]# top        //回车,立刻刷新。按z彩色显示,按F,通过光标设置列的顺序。
[root@localhost ~]# top -d 1   //每1秒刷新。
[root@localhost ~]# top -d 1 -p 10126      //查看指定进程的动态信息
[root@localhost ~]# top -d 1 -p 10126,1    //查看10126和1号进程

4.使用信号控制进程kill

4.1.信号种类

给进程发送信号(kill -l列出所有支持的信号)

[root@localhost ~]# kill -l

常用编号 信号名
1 SIGHUP 重新加载配置
2 SIGINT 键盘中断Ctrl+C
3 SIGQUIT 键盘退出Ctrl+\,类似SIGINT
9 SIGKILL 强制终止,无条件
15 SIGTERM 终止(正常结束),缺省信号
18 SIGCONT 继续
19 SIGSTOP 暂停
20 SIGTSTP 键盘暂停Ctrl+Z

4.2.信号9,15示例

观察两个终端,一个正常终止,一个非法杀死。

创建2个文件,使用tty查看终端号。
[root@localhost ~]# touch file1 file2
[root@localhost ~]# tty

通过一个终端,打开一个vim
[root@localhost ~]# vim file1

通过另一个终端,打开一个vim
[root@localhost ~]# vim file2

通过另一个终端,查询两个进程。
[root@localhost ~]# ps aux |grep vim
root 4362 0.0 0.2 11104 2888 pts/1 S+ 23:02 0:00 vim file1
root 4363 0.1 0.2 11068 2948 pts/2 S+ 23:02 0:00 vim file2

发送信号15 和信号9 ,观察两个终端程序状态。
[root@localhost ~]# kill -15 4362
[root@localhost ~]# kill -9 4363

注意:杀死文件之后产生的隐藏文件(.开头 .file1.swp)使用 ls -a 查看,删除后才可以正常打开文件。

5.进程优先级nice

5.1.简介

Linux 进程调度及多任务时,每个CPU在一个时间点上只能处理一个进程,通过时间片技术,来同时运行多个程序。(优先级越高,分配的资源越多

5.2.范围

在top中显示的优先级有两个,PR值和nice值
NI: 实际nice值(-20~19)
PR(+20): 将nice级别显示为映射到更大优先级队列(系统的优先级),-20映射到0,+19映射到39。
6

5.3.特性

nice 值越大: 表示优先级越低
例如+19;nice 值越小: 表示优先级越高,例如-20

5.4.查看进程的优先级

[root@localhost ~]# ps axo pid,command,nice --sort=-nice

5.5.启动具有不同nice级别的进程

语法:nice -n 数字 进程名
默认情况:启动进程时,通常会继承父进程的 nice级别,默认为0
示例:手动启动nice

[root@localhost ~]# nice -n -5(优先级) sleep 6000 &(后台)
[1] 2220(pid)

5.6.更改现有进程的nice级别

语法:renice 数字 进程pid
示例:使用shell更改nice级别

创建一个睡眠示例程序
[root@localhost ~]# sleep 7000 &
[2] 2669

修改他的nice值
[root@localhost ~]# renice -20 2669

解释:2669 (进程 ID) 旧优先级为 0,新优先级为 -20,观察修旧的nice值。

6.作业控制jobs(了解)

6.1.简介

作业控制是一个命令行功能,也叫后台运行

6.2.关键词介绍

foreground(fg)前台进程:是在终端中运行的命令,占领终端;
background(bg)后台进程:没有控制终端,它不需要终端的交互(看不见,但是在运行)。

6.3.后台程序控制示例

观察占领前台的现象

[root@localhost ~]# sleep 2000

运行一个程序,当前终端无法输入。观察占领前台的现象;大部分命令行输入已经无效。
注意:ctrl + c 终止进程

运行后台程序
[root@localhost ~]# sleep 3000 &

ps查询所有程序
[root@localhost ~]# ps aux |grep sleep
root 8895 0.0 0.0 100900 556 pts/0 S 12:13 0:00 sleep 3000

jobs查看后台进程
[root@localhost ~]# jobs
[1]+ Running sleep 3000 &	//+,-代表,使用fg时,默认调动至前台的进程。先是+,后是-

调动后台程序至前台
[root@localhost ~]# fg  1	//将作业1调回到前台fg  序号
ctrl + z 停止进程,使用jobs查看后台进程显示‘已停止’,再使用bg 序号在后台继续运行

消灭后台进程
[root@localhost ~]# kill  %1

注意:“kill 1”和“kill %1”不同,前者终止PID为1的进程,后者杀死作业序号为1的后台程序。

7.虚拟文件系统 proc (了解)

虚拟文件系统:采集服务器自身 内核、进程运行的状态信息。
CPU:/proc/cpuinfo

[root@localhost ~]# cat   /proc/cpuinfo

内存:/proc/meminfo

[root@localhost ~]# less /proc/meminfo

内核:/proc/cmdline

[root@localhost ~]# cat /proc/cmdline
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TA548464

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值