Linux系统进程管理及命令操作

进程的概念

  1. 进程是什么
    进程是已启动的可执行程序的运行实例,进程有以下组成部分:
    • 已分配内存的地址空间;
    • 安全属性,包括所有权凭据和特权;
    • 程序代码的一个或多个执行线程;
    • 进程状态。
    程序: 二进制文件,静态 /usr/bin/passwd ,/usr/sbin/useradd
    进程: 是程序运行的过程, 动态,有生命周期及运行状态。

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

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

  4. 进程的状态
    在这里插入图片描述

进程的管理

1.进程管理的目标

  • PID,PPID
  • 当前的进程状态
  • 内存的分配情况
  • CPU和已花费的实际时间
  • 用户UID,它决定进程的特权
  • 进程名称
  1. 静态查看进程
  • PS:precess status 进程 状态
[root@localhost ~]# ps  aux  |head -2
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  1.7  0.2 193772  2624 ?        Ss   18:22   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22

user:运行程序的用户账户名
PID:进程的序号,id,身份证号
%CPU:进程的cpu消耗百分比
%MEM:进程的内存消耗百分比
VSZ:虚拟内存占用大小
RSS:实际占用内存大小
TTY:进程开启的终端
STAT:当前进程的状态
START:进程开始的时间
TIME:进程CPU使用时间
COMMAND:执行命令的名字,进程文件  进程名  
  • 进程的排序
    语法:ps aux --sort-%cpu
    以CPU占比降序排列(减号是降序)
[root@localhost ~]#  ps aux --sort -%cpu
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       2123  1.7 18.6 3035224 185356 ?      Sl   18:23   0:24 /usr/bin/gnome-shell
root       1322  0.6  5.2 341880 52004 tty1     Ssl+ 18:22   0:09 /usr/bin/X :0 -background none -noreset -audit 4 -verbose -auth /r
root       2577  0.3  2.2 697884 22488 ?        Sl   18:23   0:04 /usr/libexec/gnome-terminal-server
root        726  0.2  0.1 324680  1868 ?        Ssl  18:22   0:02 /usr/bin/vmtoolsd
root       2388  0.2  0.9 640756  9760 ?        Sl   18:23   0:02 /usr/bin/vmtoolsd -n vmusr
root          1  0.1  0.4 193772  4424 ?        Ss   18:22   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root        129  0.1  0.0      0     0 ?        S    18:22   0:01 [kworker/0:3]
root        768  0.1  0.0  90564   300 ?        Ss   18:22   0:01 /sbin/rngd -f

  • 进程的父子关系
    语法:ps -ef
    观察PID PPID
[root@localhost ~]# ps  -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 18:22 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 18:22 ?        00:00:00 [kthreadd]
root          4      2  0 18:22 ?        00:00:00 [kworker/0:0H]
root          6      2  0 18:22 ?        00:00:00 [ksoftirqd/0]
root          7      2  0 18:22 ?        00:00:00 [migration/0]
root          8      2  0 18:22 ?        00:00:00 [rcu_bh]
root          9      2  0 18:22 ?        00:00:01 [rcu_sched]

  • 自定义显示字段
    语法:ps axo
[root@localhost ~]# ps axo user,pid,ppid,%mem,command |head -3 
USER        PID   PPID %MEM COMMAND
root          1      0  0.4 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0.0 [kthreadd]
  1. 动态查看进程top
  • top 命令用于查看进程动态,即进程使用系统资源的情况
top - 11:45:08 up 18:54,  4 users,  load average: 0.05, 0.05, 0.05
Tasks: 176 total,   1 running, 175 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3865520 total,  1100000 free,   580268 used,  2185252 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  2917828 avail Mem 

第一行:在这里插入图片描述
第二行:
在这里插入图片描述
第三行:在这里插入图片描述
第四行:
在这里插入图片描述
第五行:在这里插入图片描述

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

PID ,USER, %CPU, %MEM,TIME, COMMAND,上面有介绍此处省略。
VIRT:virtual memory usage 虚拟内存 ( 需要这些内存,但并没有占满。)
RES:resident memory usage 常驻内存 (用了多少内存)
SHR:shared memory 共享内存 (除了自身进程的共享内存,也包括其他进程的共享内存)

  • top内部常用指令

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

  • 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号进程
  1. 使用信号控制进程kill
  • 信号的种类
    语法:kill - 数字
给进程发送信号(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
  1. 进程的优先级nice
  • 什么叫进程的优先级
    Linux 进程调度及多任务
    每个CPU在一个时间点上只能处理一个进程,通过时间片技术,来同时运行多个程序。
  • 优先级范围和特性
    在这里插入图片描述
    在top中显示的优先级有两个,PR值和nice值

NI: 实际nice值
PR(+20): 将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39

  • 优先级的特性
    nice 值越高: 表示优先级越低,例如+19
    nice 值越低: 表示优先级越高,例如-20
  • 查看进程的nice级别
[root@localhost ~]# ps axo pid,command,nice,cls --sort=-nice
  PID COMMAND                      NI CLS
   32 [khugepaged]                 19  TS
  747 /usr/sbin/alsactl -s -n 19   19  TS
 2390 /usr/libexec/tracker-extrac  19  TS
 2391 /usr/libexec/tracker-miner-  19  TS
 2392 /usr/libexec/tracker-miner-   - IDL
 2404 /usr/libexec/tracker-miner-   - IDL
   31 [ksmd]                        5  TS
  779 /usr/libexec/rtkit-daemon     1  TS
    1 /usr/lib/systemd/systemd --   0  TS
    2 [kthreadd]                    0  TS
    6 [ksoftirqd/0]                 0  TS
    7 [migration/0]                 -  FF

cls表示显示策略列
TS 表示该进程使用的调度策略为SCHED_OTHER
FF表示高级进程first in first out

  • 启动具有不同nice级别的进程
    启动进程时,通常会继承父进程的 nice级别,默认为0。观察两个程序的不同nice值

启动不同nice

[root@localhost ~]# nice -n -5 sleep 6000 &
[1] 2220
[root@localhost ~]# nice -n -10 sleep 7000 &
[2] 2229
[root@localhost ~]# ps axo command,pid,nice | grep sleep
sleep 6000                    2220  -5
sleep 7000                    2229 -10
grep --color=auto sleep       2233   0
  • 更改现有进程的nice级别
[root@localhost ~]# sleep 7000 &
[2] 2669
root@localhost ~]# renice -20 2669
2669
(进程 ID) 旧优先级为 0,新优先级为 -20

作业控制jobs

  • 作业控制是一个命令行功能,也叫后台运行,主要有两个关键词。

foreground:前台进程:是在终端中运行的命令,占领终端。

background:后台进程:没有控制终端,它不需要终端的交互。看不见,但是在运行。

  • 后台控制示例
    看一下占领前台的现象
[root@localhost ~]# sleep 2000

运行一个程序,当前终端无法输入,占领前台的现象,
大部分命令行输入已经无效。

运行后台程序

[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 &

调动后台程序至前台

[root@localhost ~]# fg  1 //将作业1调回到前台

消灭后台进程

[root@qianfeng ~]# kill  %1
注意,“kill 1”   和   “kill   %1”  不同,
前者终止PID为1的进程,
后者杀死作业序号为1的后台程序。

& :后台运行程序
jobs: 查询后台
kill %1 : 停止后台进程

虚拟文件系统proc

  • 虚拟文件系统:采集服务器自身 内核、进程运行的状态信息
  • CPU /proc/cpuinfo
[root@localhost ~]# cat   /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 60
model name	: Intel(R) Core(TM) i5-4200H CPU @ 2.80GHz
stepping	: 3
microcode	: 0x24
cpu MHz		: 2793.542
cache size	: 3072 KB
physical id	: 0
siblings	: 1
core id		: 0
cpu cores	: 1
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt arat
bogomips	: 5587.08
clflush size	: 64
cache_alignment	: 64
address sizes	: 43 bits physical, 48 bits virtual
  • 内存 /proc/meminfo
  • 内核 /proc/cmdline
[root@localhost ~]# cat /proc/cmdline 
BOOT_IMAGE=/vmlinuz-3.10.0-1062.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=zh_CN.UTF-8

cpuinfo:CPU的硬件信息 (型号, 家族, 缓存大小等)
meminfo:物理内存、交换空间等的信息,系统内存占用情况,对应df命令
cmdline:系统启动时输入给内核命令行参数

猜你喜欢

转载自blog.csdn.net/m0_48654420/article/details/107671372