22. Linux的进程管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了22. Linux的进程管理相关的知识,希望对你有一定的参考价值。

参考技术A 1.1 在Linux中,每个执行的程序都称为一个进程,每一个进程都分配一个ID号(pid,进程号)。

1.2 每个进程都可能以两种方式存在,前台和后台。

1.2.1 前台进程:用户目前的屏幕上可以进行操作的,占据了屏幕的进程,例如vim

1.2.2 后台进程:实际上在操作,但屏幕上无法看到的进程,例如mysql服务、ssh等

1.3 一般来说,系统服务都是以后台方式存在,且常驻系统,直到关机才结束。

ps命令用来查看目前系统中,有哪些正在执行,以及它们执行的情况。可以不加任何参数。

PID:进程识别号

TTY:终端机号

TIME:此进程所消耗的CPU时间

CMD:正在执行的命令或进程名

ps -a 显示当前终端的所有进程信息

ps -u 以用户的格式显示进程信息

ps -x 显示后台进程运行的参数

USER:进程执行用户

PID:进程号

%CPU:占用CPU的百分比

%MEM:占用物理内存的百分比

VSZ:占用虚拟内存的大小,单位KB

RSS:占用物理内存的大小,单位KB

TTY:终端

STAT:当前运行状态

    S(大写)表示休眠,即sleep

    R(大写)表示正在运行

    D(大写)表示短期等待

    Z(大写)表示僵死进程

START:进程执行的开始时间

TIME:这个进程占用CPU的时间

COMMAND:进程的名字,也可以理解为执行该进程的指令

ps -ef 可以以全格式显示当前所有进程

-e显示所有进程

-f以全格式显示,如下面两幅图所示。

可以看到,/usr/sbin/sshd的进程号为7092,其父进程为1号进程,1号进程是systemd进程,而systemd进程的父进程为0号,也就是没有父进程。即,系统启动后的第一个进程就是systemd进程,systemd进程会启动sshd进程。

再仔细看,sshd: root@pts/1是xshell登陆root用户后的进程,进程号为7183,父进程为7092,也即sshd进程。继续用其他用户远程登陆linux,就会增加7092进程的子进程。

当某个进程执行过程中需要停止,或者已经消耗了太多的系统资源时,可以考虑停止这个进程,使用kill命令。

kill [选项] 进程号

killall 进程名称 这个命令通过进程名称杀死进程,支持通配符,当系统因负载过大而很慢时,这个指令就很有用了。假如abc进程有3个子进程,killall abc就会把abc停止,并且停止其所有3个子进程。

常用选项,

    -9 强迫进程立即停止

示例,

4.1 踢掉某个用户

ps -aux | grep sshd

kill 17204 (因为在我这里查到,17204是该用户ssh登陆linux的进程)

4.2 终止远程登陆服务sshd,在适当时候再次重启sshd服务

kill sshd对应的进程号PID

/bin/systemctl start sshd.service

4.3 终止多个gedit,演示killall

比如用gedit打开多个文本文件,然后进程中会出现gedit

killall gedit就会杀掉gedit进程,同时看到文本文档编辑页面被关掉了。

4.4 强制杀掉一个终端

kill -9 10487 强制杀掉10487进程(比如terminal这样的进程,如果不加-9是不可以杀掉的)

pstree [选项] 这条指令可以更加直观的查看进程信息

常用选项,

-p 显示进程的PID

-u 显示进程的所属用户

示例,

5.1 以树状的形式显示进程的PID

pstree -p

5.2 以树状的形式显示进程的用户id

pstree -u

linux进程管理

Linux进程及作业管理

内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能

    Process: 运行中的程序的一个副本;存在生命周期

            用户空间:执行用户代码;内核空间:执行系统调用的过程。

      Linux内核存储进程信息的固定格式:task struct

多个任务的的task struct组件的链表:task list

进程创建:

init,systemctl

 父子关系

进程:都由其父进程创建,子进程复制父进程的过程称cow。

fork() 

                            clone()

进程优先级:

0-139:

1-99:实时优先级;

100-139:静态优先级;

数字越小,优先级越高;

Nice值:

-20,19

Big O-算法复杂度标准

O(1), O(logn), O(n), O(n^2), O(2^n)

进程内存:

Page Frame: 页框,用存储页面数据---物理地址空间。

存储Page

MMU:Memory Management Unit

 进程通信机制:IPC: Inter Process Communication

同一主机上:

signal

shm: shared memory

semerphor

不同主机上:

rpc: remote procecure call

socket: 

Linux内核:抢占式多任务

进程类型:

守护进程: 在系统引导过程中启动的进程,跟终端无关的进程;

前台进程:跟终端相关,通过终端启动的进程

注意:也可把在前台启动的进程送往后台,以守护模式运行;

进程状态:

运行态:running

就绪态:ready

睡眠态:

可中断:interruptable

不可中断:uninterruptable----不可中断是指等待I/O读入磁盘的时间。

停止态:暂停于内存中,但不会被调度,除非手动启动之;stopped

僵死态:zombie--父进程死了,而子进程却未关闭。

进程的分类:

CPU-Bound

IO-Bound

《Linux内核设计与实现》,《深入理解Linux内核》

Linux系统上的进程查看及管理工具:pstree, ps, pidof, pgrep, top, htop, glances, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup, nice, renice,                  killall, ...

CentOS 5:  SysV init

CentOS 6:upstart

CentOS 7:systemd

/sbin/init, 

pstree命令:

pstree  - display a tree of processes

ps命令:

   /proc/:内核中的状态信息;

内核参数:

可设置其值从而调整内核运行特性的参数;/proc/sys/

状态变量:其用于输出内核中统计信息或状态信息,仅用于查看;

参数:模拟成文件系统类型;

进程:

/proc/#:

#:PID 

ps - report a snapshot of the current processes.

ps [options]:

选项有三种风格:

1   UNIX options, which may be grouped and must be preceded by a dash.

2   BSD options, which may be grouped and must not be used with a dash.

3   GNU long options, which are preceded by two dashes.

启动进程的方式:

系统启动过程中自动启动:与终端无关的进程;

用户通过终端启动:与终端相关的进程;

选项:

a:所有与终端相关的进程;

x:所有与终端无关的进程;

u:以用户为中心组织进程状态信息显示;

常用组合之一:aux

技术分享

VSZ:虚拟内存集;RSS:Resident Size,常驻内存集;C: cpu utilization    PSR:运行于哪颗CPU之上

STAT:R:running、S:interruptable sleepingD:uninterruptable sleeping、T:Stopped、Z:zombie

+:前台进程     l:多线程进程    N:低优先级进程    <:高优先级进程  s:session leader 

-e:显示所有进程

-f:显示完整格式的进程信息

常用组合之二:-ef

技术分享

-F:显示完整格式的进程信息;

-H:以层级结构显示进程的相关信息;

常用组合之三:-eFH

常用组合之四:-eo, axo

-o  field1, field2,...:自定义要显示的字段列表,以逗号分隔;

常用的field:pid, ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio

ni:nice值;

priority:priority, 优先级;

rtprio:real time priority,实时优先级;

pgrep, pkill命令: - look up or signal processes based on name and other attributes

pgrep [options] pattern

-u uid:effective user

-U uid:read user

-t  TERMINAL:与指定的终端相关的进程;

-l:显示进程名;

-a:显示完整格式的进程名;

-P pid:显示此进程的子进程;

pidof命令:

根据进程名,取其pid;

top命令:

- display Linux processes

技术分享

CPU:us, sy, ni, id, hi, si, cs, st

Memory:VSZ,RSS,SHM

排序:

P:以占据CPU百分比排序;

M:以占据内存百分比排序;

T:累积占用CPU时间排序;

首部信息:

uptime信息:l命令

tasks及cpu信息:t命令

内存信息:m命令

退出命令:q

修改刷新时间间隔:s

终止指定的进程:k

选项:

-d #:指定刷新时间间隔,默认为3秒;

-b:以批次方式显示;

-n #:显示多少批次;

uptime命令:显示系统时间、运行时长及平均负载;

过去1分钟、5分钟和15分钟的平均负载;

等待运行的进程队列的长度;

回顾: Linux OS基础概念、进程查看的几工具;

内核的功能:进程管理(进程调度)

进程调度:保存现场,恢复现场;

task struct:任务结构;

task list:任务列表;

命令: pstree, pgrep, pkill, ps, top, uptime 

Linux进程及作业管理(2)

CentOS 6: http://172.16.0.1/fedora-epel/

CentOS 7: http://172.16.0.1/fedora-epel/

进程管理类命令:

htop命令:

技术分享

选项:

-d #:指定延迟时间间隔;

-u UserName:仅显示指定用户的进程;

-s COLUME:以指定字段进行排序;

子命令:

l:显示选定的进程打开的文件列表;---重要

s:跟踪选定的进程的系统调用;---重要

t:以层级关系显示各进程状态;

a:将选定的进程绑定至某指定的CPU核心;

vmstat命令:

- Report virtual memory statistics

vmstat  [options]  [delay [count]]

技术分享

procs:

r:等待运行的进程的个数;CPU上等待运行的任务的队列长度;

b:处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度;

memory:

swpd:交换内存使用总量;

free:空闲的物理内存总量;

buffer:用于buffer的内存总量;

cache:用于cache的内存总量;

swap---si,so大量数据换进换出说明物理内存不够用了。

si:数据进入swap中的数据速率(kb/s)

so:数据离开swap的速率(kb/s)

io

bi:从块设备读入数据到系统的速度(kb/s)

bo:保存数据至块设备的速率(kb/s)

system---cs切换速率过大说明cpu性能套差

in:interrupts,中断速率;

cs:context switch, 上下文 切换的速率;

cpu 

us: user space

sy:system call

id:idle

wa:wait  I/O完成。

st: stolen

选项:

-s:显示内存统计数据;

pmap命令:- report memory map of a process(内存映射表)

pmap  [options]  pid [...]     

       -x:显示详细格式的信息;例#pmap -x 1

另一种查看方式:cat  /proc/PID/maps

glances命令:

- A cross-platform curses-based monitoring tool

技术分享

内建命令:

   常用选项:

-b:以Byte为单位显示网上数据速率;

-d:关闭磁盘I/O模块;

-m:关闭mount模块;

-n:关闭network模块;

-t #:刷新时间间隔;

-1:每个cpu的相关数据单独显示;

-o {HTML|CSV}:输出格式;

-f  /PATH/TO/SOMEDIR:设定输出文件的位置;

C/S模式下运行glances命令:

服务模式:

glances  -s  -B  IPADDR

IPADDR:本机的某地址,用于监听;

客户端模式:

glances  -c  IPADDR

IPADDR:是远程服务器的地址;

dstat命令:

- versatile tool for generating system resource statistics

技术分享

dstat [-afv] [options..] [delay [count]]

常用选项:

-c, --cpu:显示cpu相关信息;

-C #,#,...,total

-d, --disk:显示磁盘的相关信息

-D sda,sdb,...,tobal

-g:显示page相关的速率数据;

-m:Memory的相关统计数据

-n:Interface的相关统计数据;

-p:显示process的相关统计数据;

-r:显示io请求的相关的统计数据;

-s:显示swapped的相关统计数据;

--tcp 

--udp

--raw 

--socket 

--ipc 

--top-cpu:显示最占用CPU的进程;

--top-io:最占用io的进程;

--top-mem:最占用内存的进程;

--top-lantency:延迟最大的进程;

kill命令:

- terminate a process

用于向进程发送信号,以实现对进程的管理;

显示当前系统可用信号:

kill -l [signal]

每个信号的标识方法有三种:

1) 信号的数字标识;

2) 信号的完整名称;

3) 信号的简写名称;

向进程发信号:

kill  [-s signal|-SIGNAL]  pid...

常用信号:

1) SIGHUP:无须关闭进程而让其重读配置文件;

2)SIGINT:终止正在运行的进程,相当于Ctrl+c

9)SIGKILL:杀死运行中的进程;

15)SIGTERM:终止运行中的进程;

18)SIGCONT:

19)SIGSTOP:

killall命令:

- kill processes by name

killall  [-SIGNAL]  program

Linux系统作业控制:

job:

前台作业(foregroud):通过终端启动,且启动后会一直占据终端;

后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端);

如何让作业运行于后台?

(1) 运行中的作业

Ctrl+z

注意:送往后台后,作业会转为停止态;

(2) 尚未启动的作业

# COMMAND &

注意:此类作业虽然被送往后台,但其依然与终端相关;如果希望把送往后台的作业剥离与终端的关系:

# nohup  COMMAND  &

查看所有的作业:

# jobs

可实现作业控制的常用命令:

# fg  [[%]JOB_NUM]:把指定的作业调回前台;

# bg  [[%]JOB_NUM]:让送往后台的作业在后台继续运行;

# kill  %JOB_NUM:终止指定的作业;

调整进程优先级:

可通过nice值调整的优先级范围:100-139

分别对应于:-20, 19

进程启动时,其nice值默认为0,其优先级是120;

nice命令:

以指定的nice值启动并运行命令

# nice  [OPTION]  [COMMAND [ARGU]...]

选项:

-n NICE

注意:仅管理员可调低nice值; 

renice命令:

# renice  [-n]  NICE  PID...

查看Nice值和优先级:

ps  axo  pid, ni, priority, comm  

未涉及到的命令:sar,  tsar,  iostat,  iftop,  nethog,  ...

博客作业: htop/dstat/top/ps命令的使用;

网络客户端工具:

ping/lftp/ftp/lftpget/wget等;

ping命令:

send ICMP ECHO_REQUEST to network hosts

ICMP:Internet Control Message Protocol

ping  [OPTION]  destination

-c #:发送的ping包个数;

-w #:ping命令超时时长;

-W #:一次ping操作中,等待对方响应的超时时长;

-s #:指明ping包报文大小;

hping命令: (package: hping3)

send (almost) arbitrary TCP/IP packets to network hosts

--fast

--faster

--flood

-i uX

traceroute命令:

- print the route packets trace to network host

跟踪从源主机到目标主机之间经过的网关;

ftp命令:

ftp: File Transfer Protocol

ftp服务命令行客户端工具;

lftp命令:

lftp  [-p port]  [-u user[,pass]] [site]

get, mget

put, mput

rm, mrm

lftpget命令:

lftpget [-c] [-d] [-v] URL [URL...]

-c:继续此前的下载;

wget命令:

The non-interactive network downloader.

wget [option]... [URL]...

-b:在后台执行下载操作;

-q:静默模式,不显示下载进度;

-O file:下载的文件的保存位置;

-c:续传;

--limit-rate=amount:以指定的速率传输文件;


本文出自 “11284919” 博客,请务必保留此出处http://11294919.blog.51cto.com/11284919/1783221

以上是关于22. Linux的进程管理的主要内容,如果未能解决你的问题,请参考以下文章

Linux 内核Linux 内核体系架构 ( 进程调度 | 内存管理 | 中断管理 | 设备管理 | 文件系统 )

Linux性能及调优指南(翻译)之Linux进程管理

linux进程管理

Linux 进程管理 进程优先级管理

linux进程管理

Linux进程管理专题