自实现进程管理器linux,Linux进程管理及作业控制

进程概念

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

全功能等

Process:运行中的程序的一个 副本,是被 载入内存的一个指令集合

进程ID(Process ID,PID)号码被用来标记各个进程

UID、GID、和SELinux语境决定对文件系统的存取和访问权限,

通常从执行进程的用户来继承

存在生命周期

task struct:Linux内核存储进程信息的数据结构格式

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

进程创建:

init :第一个进程

父子关系

进程:都由其父进程创建, ,CoW

fork(), clone()

进程优先级

进程优先级:

系统优先级:数字越小,优先级越高

0-139(CentOS4,5)

各有140个运行队列和过期队列

0-98,99(CentOS6)

实时优先级:99-0:值最大优先级最高

nice值:-20到19,对应系统优先级100-139或99

Centos 4,5优先级

f2deb48f8c5494ee4f04f1a627f5e0fe99257e6f.jpg

Centos 6优先级

3bf33a87e950352a4c3bdbb75943fbf2b2118b33.jpg

Big O:时间复杂度,用时和规模的关系

O(1), O(logn), O(n) 线性, O(n^2) 抛物线, O(2^n)

进程相关概念

进程内存:

Page Frame:页框,用存储页面数据,存储Page 4k

LRU:Least Recently Used近期最少使用算法, 释放内存

物理地址空间和线性地址空间

MMU :Memory Management Unit负责转换线性和物理地址

TLB:Translation LookasideBuffer翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存

IPC: Inter Process Communication

同一主机: signal: 信号

shm: shared memory

semaphore: 信号量,一种计数器

不同主机:rpc: remote procedure call

socket: IP和端口号

进程状态

Linux内核:抢占式多任务

进程类型:

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

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

注意:两者可相互转化

进程状态:

运行态:running

就绪态:ready

睡眠态:

可中断:interruptable

不可中断:uninterruptable

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

僵死态:zombie

系统管理工具

进程的分类:

CPU-Bound:CPU 密集型,非交互

IO-Bound:IO 密集型,交互

Linux 系统状态的查看及管理工具:pstree, ps, pidof,pgrep, top, htop, glance, pmap, vmstat, dstat, kill,pkill, job, bg, fg, nohup

pstree 命令:

pstree - display a tree of processes

ps: process state

ps - report a snapshot of the current processes

Linux系统各进程的相关信息均保存在/proc/PID 目录下的各文件中

ps查看进程

适用ps来查看进程信息

ps [OPTION]...

支持三种选项:

UNIX选项 如-A -e

BSD选项 如a

GNU选项 如--help

选项:默认显示当前终端中的进程

a 选项包括所有终端中的进程

x 选项包括不链接终端的进程

u 选项显示进程所有者的信息

f 选项显示进程的父进程

k| --sort 属性 对属性 排序

o 属性… 选项显示定制的信息

pid、user、comm(cmd)、%cpu、%mem、state、tty、euser(==user为有效用户)、ruser(真实用户)

进程管理工具

VSZ:Virtual memory SiZe,虚拟内存集,线性内存

RSS:ReSident Size,常驻内存集

STAT:进程状态

R:running

S:interruptable sleeping(可中断)

D:uninterruptable sleeping(不可中断)

T:stopped(停止)

Z:zombie(僵死)

+:前台进程

l:多线程进程

L:内存分页并带锁

N:低优先级进程

<:>

s:session leader,会话子进程发起者

常用组合:-ef

-e:显示所有进程

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

常用组合:-eFH

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

-H:以进程层级格式显示进程相关信息

常用组合:自定义

-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm

axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

ni:nice值(值越小,优先级越高)

pri:priority 优先级(值越大,优先级越高)

psr:processor CPU编号

rtprio:实时优先级

示例:

ps axo pid,cmd,psr,ni,pri,rtprio (rtprio超出99的不显示)

d0c8a786c9177f3e51a3b5b07acf3bc79e3d56f3.jpg

进程优先级

进程优先级调整:

静态优先级:100-139

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

只有根用户才能降低nice值(提高优先性)

nice指定优先级命令:

nice [OPTION] [COMMAND [ARG]...]

nice -n -20 ping 127.0.0.1

renice修改优先级命令:

renice [-n] priority pid...

renice -n -20 ping 127.0.0.1 修改ping的renice优先级为20

renice -5 ping 127.0.0.1 修改ping的renice优先级为-5

renice 5 ping 127.0.0.1 修改ping的renice优先级为5

查看:

ps axo pid,comm,ni

搜索进程

最灵活:ps 选项 | 其它命令

按预定义的模式:pgrep

pgrep [options] pattern

-u uid: effective user,生效者

-U uid: real user,真正发起运行命令者

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

-l:显示进程名

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

-P pid:显示指定进程的子进程

按确切的程序名称:/sbin/pidof

pidof:显示指定进程的编号,可判断该进程是否存在

pidof bash

系统工具

uptime

显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不会超过1)

系统平均负载:

指在特定时间间隔内运行队列中的平均进程数

通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好.如果每个CPU 内核的任务数大于5,那么此主机的性能有严重问题

如果linux主机是1个双核CPU,当Load Average为6的时候说明机器已经被充分使用

54fbb2fb43166d22364a95294c2309f79052d24a.jpg

14:34:55 //系统当前时间

up 2:45, //主机已运行时间,时间越大,说明你的机器越稳定。

4 user //用户连接数,是总连接数而不是用户数

load average // 系统平均负载,统计最近1,5,15分钟的系统平均负载

系统平均负载是指在特定时间间隔内运行队列中的平均进程数。

如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能是良好的。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。

如果你的linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。

进程管理工具

top

选项:

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

-b:全部显示所有进程

-n #:刷新多少次后退出

有许多内置命令

排序:

P:以占据的CPU 百分比,%CPU

M:占据内存百分比,%MEM

T:累积占据CPU 时长,TIME+

首部信息显示:

uptime信息:l 命令

tasks及cpu信息:t 命令

cpu分别显示:1 ( 数字)

memory信息:m 命令

退出命令:q

修改刷新时间间隔:s

终止指定进程:k

保存文件:W

栏位信息简介

us:用户空间

sy:内核空间

ni:调整nice 时间

id:空闲

wa:等待IO 时间

hi:硬中断

si:软中断(模式切换)

st:虚拟机偷走的时间

htop 命令:需从Fedora-EPEL 源安装

选项:

-d #:指定延迟时间;

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

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

子命令:

s:跟踪选定进程的系统调用

l:显示选定进程打开的文件列表

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

t:显示进程树

内存工具

vmstat 命令:虚拟内存信息

vmstat [options] [delay [count]]

vmstat 2 5

选项:

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

procs:

r:可运行(正运行或等待运行)进程的个数,和核心数有关

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

memory:

swpd: 交换内存的使用总量

free:空闲物理内存总量

buffer:用于buffer 的内存总量

cache:用于cache 的内存总量

swap:

si:从磁盘交换进内存的数据速率(kb/s),以内存为参考点

so:从内存交换至磁盘的数据速率(kb/s),以内存为参考点

io:

bi:从块设备读入数据到系统的速率(kb/s),以内存为参考点

bo:保存数据至块设备的速率,以内存为参考点

system:

in:interrupts 中断速率,包括时钟

cs:context switch 进程切换速率

cpu:

us:Time spent running non-kernel code

sy:Time spent running kernel code

id:Time spent idle. Linux 2.5.41 前, 包括IO-wait time.

wa:Time spent waiting for IO. 2.5.41 前,包括in idle.

st:Time stolen from a virtual machine. 2.6.11 前, unknown.

iostat: 统计CPU和设备IO信息

示例:iostat 1 10 每秒刷新一次,采集10次

pmap 命令:进程对应的内存映射

pmap [options] pid [...]

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

示例:pmap 1

另外一种实现:

cat /proc/PID/maps

系统监控工具

glances 命令:EPEL源

glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P

password] [--password] [-t refresh] [-f file] [-o output]

常用选项:

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

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

-f /path/to/somefile:设定输入文件位置

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

-m:禁用mount 模块

-n:禁用网络模块

-t #:延迟时间间隔

-1:每个CPU

内建命令:

a Sort processes automatically

c Sort processes by CPU%

m Sort processes by MEM%

p Sort processes by name

i Sort processes by I/O rate

d Show/hide disk I/O stats

f Show/hide file system stats

n Show/hide network stats

s Show/hide sensors stats

y Show/hide hddtemp stats

l Show/hide logs

b Bytes or bits for network I/O

w Delete warning logs

x Delete warning and critical logs

1 Global CPU or per-CPU stats

h Show/hide this help screen

t View network I/O as combination

u View cumulative network I/O

q Quit (Esc and Ctrl-C also work)

C/S 模式下运行glances命令

服务器模式:

glances -s -B IPADDR

IPADDR:指明监听的本机哪个地址

客户端模式:

glances -c IPADDR

IPADDR:要连入的服务器端地址

dstat

dstat命令:系统资源统计,代替vmstat,iostat

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

-c:显示cpu相关信息

-C #,#,...,total

-d:显示disk相关信息

-D total,sda,sdb,...

-g:显示page相关统计数据

-m:显示memory相关统计数据

-n:显示network相关统计数据

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

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

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

--tcp

--udp

--unix

--raw

--socket

--ipc

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

--top-io:显示最占用io的进程

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

--top-latency:显示延迟最大的进程

进程管理工具

kill命令

向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开头(可省略),不区分大小写

格式

kill(选项)(参数)

kill [ -s signal | -p ] [ -a ] pid ...

kill -l [ signal ]

选项

-s:指定发送的信号。

-p:模拟发送信号。

-l:指定信号的名称列表。

-a:当处理当前进程时,不限制命令名和进程号的对应关系;

-u:指定用户。

pid:要中止进程的ID号。

Signal:表示信号。

参数

进程或作业识别号:指定要删除的进程或作业

显示当前系统可用信号: kill –l,trap -l

常用信号:man 7 signal

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

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

3) SIGQUIT:相当于ctrl+\

9) SIGKILL:强制杀死正在运行的进程

15) SIGTERM:终止正在运行的进程(默认为15)

18) SIGCONT:继续运行

kill -18 3298 将进程ID为3298的程序继续后台运行,停止后台休眠

19) SIGSTOP:后台休眠

kill -19 3298 将进程ID为3298的程序放后台休眠

指定信号的方法:

(1)信号的数字标识:1,2,9

(2)信号完整名称:SIGHUP

(3)信号的简写名称:HUP

按PID :kill [-SIGNAL] pid …

kill –n SIGNAL pid;kill –s SIGNAL pid

kill -9 1200

按名称:killall [-SIGNAL] comm…

killall -9 bash 杀死bash程序的所有进程

按模式:pkill [options] pattern

-SIGNAL

-u uid:effective user,生效者

-U uid: real user,真正发起运行命令者

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

kill -t /dev/pts/1 杀死/dev/pts/1终端的进程

-l:显示进程名(pgrep可用)

-a:显示完整格式的进程名(pgrep 可用)

-P pid: 显示指定进程的子进程

作业管理

Linux 的作业控制

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

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

让作业运行于后台

(1)运行中的作业:Ctrl+z

(2)尚未启动的作业:COMMAND &

后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系

nohup COMMAND & 会产生nohup.out文件

nohup ping 127.0.0.1 &> /dev/null & 产生的nohup.out文件导入null

screen COMMAND

screen 先打开会话窗口

ping 127.0.0.1 执行命令

终端关闭前ping进程在sshd进程下screen进程下

3ac79f3df8dcd1001bccd59e788b4710b9122f38.jpg

终端关闭后,screen进程脱离ssh进程成为独立的进程存在

c9fcc3cec3fdfc033882ce07de3f8794a5c22692.jpg

查看当前终端所有作业:

jobs

作业控制:

fg [[%]JOB_NUM]:把指定的后台作业调回前台 fg 1 将后台进程ID为1的进程调回前台进行

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

bg 1 1为进程ID

kill [%JOB_NUM]:终止指定的作业

并行运行

同时运行多个进程,提高效率

方法1

vim all.sh

f1.sh & <==> ping 127.0.0.1 &

f2.sh & <==> ping 192.168.198.134 &

f3.sh &

方法2

(f1.sh &);(f2.sh &);(f3.sh &)

(ping 127.0.0.1 &);(ping 192.168.198.134 &)

方法3

{ f1.sh & f2.sh & f3.sh & }

{ ping 127.0.0.1 & ping 192.168.198.134 & }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值