进程管理

进程管理

一、进程简介

1、进程三问

(1)什么是进程?

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

(2)进程的生命周期

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

(3)进程状态

进程状态产生的原因
进程管理
进程管理

二、进程管理

1、目标

了解进程的相关信息:

  • PID,PPID
  • 当前的进程状态
  • 内存的分配情况
  • CPU和已花费的实际时间
  • 用户UID,它决定进程的特权
  • 进程名称

2、静态查看进程ps

(1)静态查看进程

1)案例

[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

  • ps a 显示现行终端机下的所有程序
  • ps u 以用户为主的格式来显示程序状况。
  • ps x 不以终端机来区分。
2)ps aux输出的字段含义
  • USER: 运行进程的用户
  • PID: 进程ID
  • %CPU: CPU占用率
  • %MEM: 内存占用率
  • VSZ: 占用虚拟内存
  • RSS: 占用实际内存
  • TTY: 进程运行的终端
  • STAT: 进程状态

R :运行,S睡眠Sleep,T停止进程,Z僵尸进程,X死掉进程

  • START: 进程的启动时间
  • TIME: 进程占用CPU的总时间
  • COMMAND: 进程文件,进程名

(2)进程排序

1)语法

ps aux --sort %cpu

2)示例

以CPU占比降序排列(减号是降序)
[root@localhost ~]# ps aux --sort -%cpu
[root@localhost ~]# ps aux --sort %cpu

(3)进程的父子关系

1)语法

ps -ef

2)示例

查看进程的父子关系。 请观察PID和PPID
[root@localhost ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 1月22 ? 00:00:07 /usr/lib/systemd/systemd
root 2 0 0 1月22 ? 00:00:00 [kthreadd]
root 3 2 0 1月22 ? 00:00:06 [ksoftirqd/0]

(4)自定义显示字段

1)语法

ps axo

2)示例

[root@localhost ~]# ps axo user,pid,ppid,%mem,command |head -3
root 8310 1 0.1 /usr/sbin/httpd
apache 8311 8310 0.0 /usr/sbin/httpd
apache 8312 8310 0.0 /usr/sbin/httpd

3、动态查看进程

(1)示例

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

(2)字段介绍

进程管理
进程管理
进程管理
进程管理
进程管理

(3)top常用内部指令

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

(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

(1)信号种类

给进程发送信号(kill -l列出所有支持的信号)
[root@localhost ~]# kill -l

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

(2)案例

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

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

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

3 通过另一个终端,查询两个进程。
[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

4 发送信号15 和信号9 ,观察两个终端程序状态。
[root@localhost ~]# kill -15 4362
[root@localhost ~]# kill -9 4363
观察两个终端,一个正常终止,一个非法杀死。

5、进程优先级nice

(1)简介

Linux 进程调度及多任务
每个CPU在一个时间点上只能处理一个进程,通过时间片技术,来同时运行多个程序。

(2)优先级范围和特性

1)优先级图示

进程管理
在top中显示的优先级有两个,PR值和nice值

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

2)优先级特性
  • nice 值越大: 表示优先级越低,例如+19
  • nice 值越小: 表示优先级越高,例如-20

(3)查看进程的nice级别

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

(4)启动具有不同nice级别的进程

1)默认情况

启动进程时,通常会继承父进程的 nice级别,默认为0

2)手动启动不同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

(5)更改现有进程的nice级别

使用shell更改nice级别
1 创建一个睡眠示例程序。
[root@localhost ~]# sleep 7000 &
[2] 2669

2 修改他的nice值。
[root@localhost ~]# renice -20 2669
2669 (进程 ID) 旧优先级为 0,新优先级为 -20,观察修旧的nice值。

三、作业控制job

1、简介

关键词介绍

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

2、后台程序控制示例

(1)观察占领前台的现象

[root@localhost ~]# sleep 2000

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

ctrl + c 终止进程

(2)运行后台程序

[root@localhost ~]# sleep 3000 &

(3)ps查询所有程序

[root@localhost ~]# ps aux |grep sleep

root 8895 0.0 0.0 100900 556 pts/0 S 12:13 0:00 sleep 3000

(4)job查看后台进程

[root@localhost ~]# jobs

[1]+ Running sleep 3000 &:+,-代表,使用fg时,默认调动至前台的进程。先是+,后是-

(5)调动后台程序至前台

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

(6)消灭后台进程

[root@localhost ~]# kill %1

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

上一篇:Linux 进程管理(Centos 7)


下一篇:shell简单用法笔记(shell中数值运算)二