【Linux】【Basis】进程及作业管理
阅读原文时间:2023年07月09日阅读:2

进程及作业管理

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

Process: 运行中的程序的一个副本;

存在生命周期

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

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

进程创建:

init

父子关系

进程:都由其父进程创建

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

停止态:暂停于内存中,但不会被调度,除非手动启动之;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,常驻内存集;

STAT:

R:running

S:interruptable sleeping

D:uninterruptable sleeping

T:Stopped

Z:zombie

+:前台进程

l:多线程进程

N:低优先级进程

<:高优先级进程

s:session leader

-e:显示所有进程

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

常用组合之二:-ef

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

C: cpu utilization

PSR:运行于哪颗CPU之上

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

常用组合之三:-eFH

常用组合之四:-eo, axo

o&nbsp; 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&nbsp; TERMINAL:与指定的终端相关的进程;

-l:显示进程名;

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

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

pidof命令:

根据进程名,取其pid;

top命令:

- display Linux processes

排序:

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:任务列表;

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

Memory:VSZ,RSS,SHM

命令: 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&nbsp; [options]&nbsp; [delay [count]]

procs:

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

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

memory:

swpd:交换内存使用总量;

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

buffer:用于buffer的内存总量;

cache:用于cache的内存总量;

swap

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

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

io

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

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

system

in:interrupts,中断速率;

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

cpu

us: user space

sy:system

id:idle

wa:wait

st: stolen

选项:

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

pmap命令:

- report memory map of a process

pmap [options] pid [...]

-x:显示详细格式的信息;

另一种查看方式:cat&nbsp; /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&nbsp; /PATH/TO/SOMEDIR:设定输出文件的位置;

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

服务模式:

glances&nbsp; -s&nbsp; -B&nbsp; IPADDR

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

客户端模式:

glances&nbsp; -c&nbsp; 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&nbsp; [-s signal|-SIGNAL]&nbsp; pid...

常用信号:

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

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

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

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

18)SIGCONT:

19)SIGSTOP:

killall命令:

- kill processes by name

killall&nbsp; [-SIGNAL]&nbsp; program

Linux系统作业控制:

job:

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

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

如何让作业运行于后台?

(1) 运行中的作业

Ctrl+z

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

(2) 尚未启动的作业

# COMMAND &

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

# nohup&nbsp; COMMAND&nbsp; &

查看所有的作业:

# jobs

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

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

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

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

调整进程优先级:

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

分别对应于:-20, 19

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

nice命令:

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

# nice&nbsp; [OPTION]&nbsp; [COMMAND [ARGU]...]

选项:

-n NICE

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

renice命令:

# renice&nbsp; [-n]&nbsp; NICE&nbsp; PID...

查看Nice值和优先级:

ps&nbsp; axo&nbsp; pid, ni, priority, comm

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

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