本节内容

1、进程管理

2、ps

3、uptime

4、top

5、ss -tnl------ lsof -i :22




一、 进程管理的概念

程序:二进制文件,静态 /bin/date,/usr/sbin/sshd

进程:是程序运行的过程,动态,有生命周期及运行状态。

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

描述如下:

父进程复制自己的地址空间(fork  [fɔ:k] 分叉)创建一个新的(子)进程结构。每个新进程分配一个唯一的进程 ID(PID),满足跟踪安全性之需。PID 和父进程 ID(PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代。

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

centos7 PID为1的进程是:systemd

进程类型:

僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。

用自己的话表达:父进程退出了,子进程没有退出,那么这些子进程就没有父进程来管理了,就变成僵尸进程。

交互进程:是由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行;

批量处理进程:这种进程和终端没联系,是个进程序列;

守护进程:在Linux系统启动时启动的进程,并在后台运行;

超级守护进程:系统启动时由一个统一的守护进程xinet来负责管理一些进程,当相应请求到来时需要通过xinet的转接才可以唤醒被xinet管理的进程。

二、进程的属性

进程ID(PID):是唯一的数值,用来区分进程

进程状态:状态分为运行R(running)、休眠S(sleep)、僵尸Z(zombie)

三、使用ps查看进程工具

1、ps查看进程工具

例1:常用的参数:

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

u:基于用户的格式显示(U: 显示某用户ID所有的进程)

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

另一种ps查看进程的方法:ps -ef (查看内容简洁)

[root@renyz ~]# ps aux

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root          1  0.0  0.4 125568  4080 ?        Ss   09:04   0:05 /usr/lib/systemd/syste

root          2  0.0  0.0      0     0 ?        S    09:04   0:00 [kthreadd]

root          3  0.0  0.0      0     0 ?        S    09:04   0:00 [ksoftirqd/0]

root          5  0.0  0.0      0     0 ?        S<   09:04   0:00 [kworker/0:0H]

root          7  0.0  0.0      0     0 ?        S    09:04   0:00 [migration/0]

root          8  0.0  0.0      0     0 ?        S    09:04   0:00 [rcu_bh]

root          9  0.0  0.0      0     0 ?        R    09:04   0:01 [rcu_sched]

备注:

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

2、上面的参数输出每列含意

USER:启动这些进程的用户

PID:进程的ID

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

%MEM:占用内存的百分比;

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

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

STAT:该程序目前的状态,Linux进程有5种基本状态:

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

S :该程序目前正在睡眠当中,但可被某些讯号(signal) 唤醒。

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

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

D :不可中断状态.

5个基本状态后,还可以加一些字母,比如:Ss、R+等,它们含意如下:

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

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

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

s:表示进程是控制进程

l:表示进程是多线程的

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

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

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

COMMAND:该程序的实际指令

四、uptime查看系统负载

[root@renyz ~]# uptime

18:33:55 up  9:29,  1 user,  load average: 0.00, 0.01, 0.05

弹出消息含意如下:

当前时间 系统运行时间 当前登录用户 系统负载1分钟,5分钟,15分钟的平均负载

那么什么是系统平均负载呢? 系统平均负载是指在特定时间间隔内运行队列中的平均进程数。

如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能是良好的。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。

如果你的linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。

五、top命令

top - 18:36:39 up  9:31,  1 user,  load average: 0.00, 0.01, 0.05

Tasks: 160 total,   2 running, 158 sleeping,   0 stopped,   0 zombie

%Cpu(s):  0.3 us,  0.7 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

KiB Mem :   995896 total,    75692 free,   392760 used,   527444 buff/cache

KiB Swap:  2097148 total,  2097148 free,        0 used.   349284 avail Mem

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND

1 root      20   0  125568   4080   2612 S  0.0  0.4   0:05.21 systemd

2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd

3 root      20   0       0      0      0 S  0.0  0.0   0:00.75 ksoftirqd/0

5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H

7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0

8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh

9 root      20   0       0      0      0 R  0.0  0.0   0:01.44 rcu_sched

10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain

第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。

第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。

第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为CPU数据并以百分比格式显示,例如“97.1 id”意味着有97.1%的CPU处理器资源处于空闲。

第4行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。

第5行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。

第6行:

PID — 进程id

USER — 进程所有者

PR — 进程优先级

NI — nice值。负值表示高优先级,正值表示低优先级

VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR — 共享内存大小,单位kb

S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

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

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

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

COMMAND — 进程名称(命令名/命令行)

六、lsof命令

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

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

[root@renyz ~]# ss -tnl  #lsof配合ss命令使用

State      Recv-Q Send-Q Local Address:Port               Peer Address:Port

LISTEN     0      128              *:22                           *:*

LISTEN     0      128             :::22                          :::*

LISTEN     0      128            ::1:631                         :::*

LISTEN     0      100            ::1:25                          :::*

[root@renyz ~]# lsof -i :22

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

sshd    6973 root    3u  IPv4  44072      0t0  TCP *:ssh (LISTEN)

sshd    6973 root    4u  IPv6  44081      0t0  TCP *:ssh (LISTEN)

Linux进阶之进程管理的更多相关文章

  1. Linux学习之进程管理(十九)

    Linux学习之进程管理 进程查看 查看系统中所有进程,使用BSD操作系统的格式 语法:ps aux 选项: a:显示所有前台进程 x:显示所有后台进程 u:显示这个进程是由哪个用户产生的 语法:ps ...

  2. 【Linux学习】Linux系统管理1—进程管理

    Linux系统管理1-进程管理 一.Linux的三种进程 Linux包括3中不同类型的进程: 交互进程:由一个shell启动的进程.交互进程可以在前后台运行 批处理进程:该进程和终端无联系,是一个进程 ...

  3. Linux学习之进程管理

    |-进程管理     进程常用命令        |- w查看当前系统信息        |- ps进程查看命令        |- kill终止进程        |- 一个存放内存中的特殊目录/p ...

  4. Linux网络和进程管理

     1) 计算机网络是通过外围的设备和连接,将分布在相同或不同区域的多台计算机 连接在一起所形成的集合.网络中的计算机实现彼此间互相通信,并且可以共 同使用硬件.软件和数据资源,实现资源共享.Lin ...

  5. Linux网络配置&进程管理

     原理图 查看ip和网关

  6. Linux系统分区 进程管理 软件包安装

    对于一块新的磁盘来说,系统能够使用需要有分区.格式化文件系统.挂载等主要操作,下面通过命令的方式对一块磁盘进行操作. 一. Linux系统分区 1.1 在虚拟机开机前选择虚拟机配置,添加一个新的SCS ...

  7. 深入Linux内核架构——进程管理和调度(下)

    五.调度器的实现 调度器的任务是在程序之间共享CPU时间,创造并行执行的错觉.该任务可分为调度策略和上下文切换两个不同部分. 1.概观 暂时不考虑实时进程,只考虑CFS调度器.经典的调度器对系统中的进 ...

  8. 深入Linux内核架构——进程管理和调度(上)

    如果系统只有一个处理器,那么给定时刻只有一个程序可以运行.在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目.内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停 ...

  9. Linux系统编程@进程管理(一)

    课程目标: 构建一个基于主机系统的多客户即时通信/聊天室项目 涉及的理论知识 进程控制:僵尸进程/孤儿进程.进程控制.守护进程... 进程间通信:管道.命名管道.信号... 多线程编程: 锁.信号量. ...

随机推荐

  1. 201871010109-胡欢欢-实验一-软件工程的准备(初识github及《现代软件工程-构建之法》)

    项目 内容 课程班级博客链接 2021年春软件工程课程班(2018级计算机科学与技术) 这个作业要求链接链接 实验一软件工程准备 我的课程学习目标 了解github的基本使用,学习markdown编辑 ...

  2. 消息队列高手课,带你从源码角度全面解析MQ的设计与实现

    消息队列中间件的使用并不复杂,但如果你对消息队列不熟悉,很难构建出健壮.稳定并且高性能的企业级系统,你会面临很多实际问题: 如何选择最适合系统的消息队列产品? 如何保证消息不重复.不丢失? 如果你掌握 ...

  3. Spring Security框架中踢人下线技术探索

    1.背景 在某次项目的开发中,使用到了Spring Security权限框架进行后端权限开发的权限校验,底层集成Spring Session组件,非常方便的集成Redis进行分布式Session的会话 ...

  4. Vue Hello World

    1 Vue介绍 伟大的项目是从Hello World而来的,Hello World尽管没有什么实际性的作用,但是在于意义重大.(哈哈哈哈) 好了不废话了入正题. Vue是一套用于构建用户界面的渐进式J ...

  5. kubernetes-copyFromPod

    import com.google.common.io.ByteStreams; import io.kubernetes.client.Copy; import io.kubernetes.clie ...

  6. 3年经验硬抗字节Java岗,25天4轮面试终拿意向书,复述原题及经验

    这次面试字节跳动也是做了很多的准备,还好顺利拿到了offer,特分享一下这次的4面技术面真题,以及一份字节2-2师兄整理的面试手册,希望能够给一些正在面试字节或计划面试大厂的朋友提供帮助. 字节跳动技 ...

  7. E - Level K Palindrome

    题目大意: As a token of his gratitude, Takahashi has decided to give Snuke a level-KK palindrome. A leve ...

  8. 【秒懂音视频开发】21_显示BMP图片

    文本的主要内容是:使用SDL显示一张BMP图片,算是为后面的<播放YUV>做准备. 为什么是显示BMP图片?而不是显示JPG或PNG图片? 因为SDL内置了加载BMP的API,使用起来会更 ...

  9. 【yml】springboot 配置类 yml语法

    参考:https://www.runoob.com/w3cnote/yaml-intro.html YAML 是 "YAML Ain't a Markup Language"(YA ...

  10. showdan

    from shodan import Shodan import json api = Shodan("") result = api.search('windows') with ...