进程管理

一、进程简介

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的后台程序。

©著作权归作者所有:来自51CTO博客作者青云文质的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Linux详解进程管理——ps进程、top、后台管理一篇学会【CentOS】
  2. linux-系统状态命令
  3. IntelliJ IDEA—使用Find Action 就会跳出终端视窗怎么解决?
  4. OpenResty 概要及原理科普
  5. 我擦!发红包遇到了微信抖动!
  6. 什么是CPU 上下文切换
  7. 常用的Linux命令片段
  8. 退出进程 替换接口
  9. php守护进程创建和简要分析

随机推荐

  1. linux性能监测工具perf
  2. Linux源码中的mktime算法解析
  3. Linux下运行.cpp文件
  4. 【思维导图】Linux0.11内核流程(从“开机
  5. Linux 运维自动化之Cobbler实战案例
  6. 添用户报错:useradd:警告:此主目录已经存在
  7. linux+nginx+php websocket server问题
  8. 如何使用“tail -1 * / filename”拖尾多
  9. 认识并编写一个Makefile
  10. uinx 信号 SIGINT SIGTERM SIGKILL区别