linux实现进程管理,linux系统进程管理

进程与线程

1.进程 :是系统资源管理的最小单位

2.线程 :是程序执行的最小单位

3.线程比进程小

4.线程和进程的最大区别在于线程完全共享相同的地址空间,运行在同一地址上

5.多个程序在同一时间请求,CPU根据”先进先出” 原则执行线程。而其他的线程则在线程队列中等待

一个正在执行的进程称为一个任务,一个任务可以包含多个进程,因此对任务的控制即是对正在运行的进程进行控制

Linux系统最高进程

Linux系统启动后即产生了第一个进程,即systemd进程。此进程的PID号(进程号)为1, 所有子进程都是通过(父进程)systemd进程衍生 (fork)的,如果某个进程父进程意外结束,子进程会以systemd作为父进程

查看进程信息与状态 ps

ps [options]

a显示当前终端下所有用户的进程

x选择所有不在当前终端下的进程。

u查看进程的UID或账户名

e 选择所有的进程

f 列示完整的列表

l 显示进程的所属者,进程号和父进程号

# ps aux | head -n5

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.1 0.3 193628 6764 ? Ss 09:15 0:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

root 2 0.0 0.0 0 0 ? S 09:15 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S 09:15 0:00 [ksoftirqd/0]

root 5 0.0 0.0 0 0 ? S< 09:15 0:00 [kworker/0:0H]

表头释义:

USER:程序是以哪个用户名的名义运行

PID:进程号,PID号范围为1-32768,至最高值,则循环。

%CPU:进程的CPU使用率

%MEM:进程的MEM使用率

VSZ:进程所使用的虚拟内存大小(Virtual Size)

RSS:进程使用的驻留集大小或实际内存的大小 (Kbytes)

TTY:进程在哪个TTY执行的

STAT:进程的状态

START:进程启动时间及日期

TIME:进程使用的总CPU时间

COMMAND:正在执行的命令及参数

# ps -elf | head -5

F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD

4 S root 1 0 0 80 0 - 48407 ep_pol 09:15 ? 00:00:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

1 S root 2 0 0 80 0 - 0 kthrea 09:15 ? 00:00:00 [kthreadd]

1 S root 3 2 0 80 0 - 0 smpboo 09:15 ? 00:00:00 [ksoftirqd/0]

1 S root 5 2 0 60 -20 - 0 worker 09:15 ? 00:00:00 [kworker/0:0H]

表头释义:

F:标记.1.进程forked(交叉),但未执行exec调用 4.用特权用户权限

S:进程状态,以1个字符进行表示

PID:执行此进程的PID

PPID:此进程的父进程号

C:进程CPU的使用率,为整数

PRI:进程优先级编号

NI:优先级

ADDR:进程所在内存地址

SZ:实际占用的物理内存大小

WCHAN:使用kernel函数的进程处于休眠状态

STIME:进程启动的时间

TTY:进程在哪个终端执行

TIME:进程执行所花费的时间

CMD:执行的命令及参数

生成新报表 ps

# ps

PID TTY TIME CMD

2417 pts/0 00:00:01 bash

4568 pts/0 00:00:00 ps

# ps -o pid,pcpu,nice,comm,tty,time

PID %CPU NI COMMAND TT TIME

2417 0.0 0 bash pts/0 00:00:01

4567 0.0 0 ps pts/0 00:00:00

#显示PID,命令,pri优先级(数字越大,优先级越高),nice优先级,realtime优先级

# ps xo pid,cmd,pri,nice,rtprio | head -4

PID CMD PRI NI RTPRIO

1 /usr/lib/systemd/systemd -- 19 0 -

2 [kthreadd] 19 0 -

3 [ksoftirqd/0] 19 0 -

看系统占用内存最高的进程的TOP10

ps aux | sort -rnk4 | head -10 | awk '{print $4,$11}'

//r降序,n 数值排序,-k以文本的那一列进行判断

查看系统占用CPU最高的进程的TOP10

ps aux | sort -rnk3 | sed '/%CPU/d' | head -n10 | awk '{print $3,$11}'

杀掉僵尸进程

ps –eal | awk ‘{if ($2 == “Z”){print $4}}' | xargs kill -9

根据进程PID或命令互查

ps -p 1236 -o comm=

ps -C sleep -o pid=

查看进程树并显示进程属主和进程ID(可不带用户名)

pstree -lpu apache #l 长格式(显示名称和PID),p显示PID,u显示进程属主

pgrep -lo httpd #l 长格式,oldest,newest

pgrep -ln httpd #查看httpd最新开启的进程

pgrep -l httpd

pidfo bash #显示bash进程的PID

类似windows的资源管理器,实时显示当前系统资源情况 top

32cf14d258b6

top输出:

第一行:1.当前系统时间 2.uptime时间3.当前登入系统的账户总数 4.当前系统1、5、15分钟的系统负载值(即任务队列的平均长度,数值超过核心数即为负载过大,按1展开显示各个CPU的核心状态)

列出进程所打开的文件的信息 lsof

# lsof -u alex| head -n4

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

bash 5300 alex cwd DIR 253,0 4096 393217 /root

bash 5300 alex rtd DIR 253,0 4096 2 /

bash 5300 alex txt REG 253,0 960392 394955 /usr/bin/bash

lsof输出:

1.COMMAND:进程的名称 2.PID:进程标识符 3.USER:进程所有者 4.FD:文件描述符,应用程序通过文件描述符识别该文件 5.TYPE:文件类型 6.DEVICE:指定磁盘的名称 7.SIZE:文件的大小 8.NODE:索引节点(文件在磁盘上的标识) 9.NAME:打开文件的确切名称

查看文件系统阻塞 lsof /boot

查看打开指定文件的所有进程 lsof /var/log/message

显示指定目录下被进程打开的文件 lsof +d /var/log

查看端口号被哪个进程占用 lsof -i :3306

查看用户打开哪些文件 lsof –u username

查看进程打开哪些文件 lsof –p 4838

查看远程已打开的网络链接 lsof –i @192.168.0.128

列出除了某个用户外被打开的文件 lsof -u root

列出某个程序所打开的文件 lsof -c cron

列出多个PID所打开的文件 lsof -p 123,234,111

列出某个用户组所打开的文件 lsof -g 0

进程/终端控制 kill

# kill -19 2345 #挂起PID为2345的进程

# kill -9 3245 #强行终止PID为3245的进程

# killall bash #终止bash同名程序

# killall5 -9 #终止所有进程,慎用

# pkill -t tty1 #终止tty1终端的连接

任务优先级 nice

在程序启动时直接赋予相关进程的优先级,最高的优先级指数是-20,最低是19

还记得ps -elf的第八列是任务优先级信息吗?

如对app脚本设置最低优先级

# nice 19 ./app &

#ps -elf | grep app |grep -v grep | awk '{print $5}'

#更改PID为2784的进程优先级为最高优先级renice

# renice -20 2784

输出CPU和磁盘I/O相关的统计信息iostat

# iostat

Linux 3.10.0-514.el7.x86_64 (centos7) 2019年05月19日 _x86_64_ (8 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle

0.02 0.00 0.13 0.01 0.00 99.84

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

sda 4.79 126.83 6.41 242746 12276

scd0 0.01 0.03 0.00 54 0

dm-0 5.11 113.05 6.38 216373 12220

表头释义:

第1行: 1.kernel版本(完整的主机名称)2. 报告生成日期3. 系统架构(CPU数)

第3行avg-cpu CPU平均值

%user 在用户运行进程所占用的CPU百分比

%nice 进程优先级操作所占用的CPU百分

%system 系统级别(kernel)运行所使用的CPU百分比

第6行1. tps 每秒钟传输的IO请求的数量 Blk_read/s 块设备每秒钟读取的数量 Blk_wrtn/s 块设备每秒钟写入的数量Blk_read 块设备读出的总数 blk_wrtn 块设备写入的总数

>每2秒显示一次设备统计信息,输出6次 iostat -d 2 6

每2秒以K为单位显示一次设备统计信息,且显示 LVM映射名称,共计10次 iostat -dNk 2 10

>监控CPU、内存、虚拟内存交换、IO读写等各种情况的使用 vmstat

# vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

r b swpd free buff cache si so bi bo in cs us sy id wa st

1 0 0 1408656 19508 309476 0 0 10 1 18 18 0 0 100 0 0

表头释义:

Proc进程:1.r 表示运行队列,2.b 阻塞队列

Memory内存:1.swap 当前swap使用k数的情况2.free 当前物理内存空闲的k数buff 内存使用的buff总数,一般为块设备操作,文档权限记录等 3.cache 内存使用的cache总数,一般打开文件,运行程序等使用

swq 虚拟内存1. si 每秒钟从磁盘读入到swap的大小,不可长期>0 2. so 每秒钟从swap写入到磁盘的大小,不可长期>0

IO块设备:1.bi 块设备每秒接收到的块数 2.bo 块设备每秒发送的块数

System系统情况:1.in 系统的每秒中断数总计(含时钟中断) 2.cs 每秒上下文切换的次数(系统调用,环境变化等)

cpu情况:1.us 用户(及优先级)占用CPU时间 2.sy 系统(kernel级)占用CPU时间 3.id 闲置CPU时间 4.wa io等待CPU时间 6.st 一个虚拟机占用的CPU时间(

如kvm)

▪procs:r这一列显示了多少进程在等待cpu,b列显示多少进程正在不可中断的休眠(等待IO)

▪ memory:swapd列显示了多少块被换出了磁盘(页面交换),剩下的列显示了多少块是空闲的(未被使用),多少块正在被用作缓冲区,以及多少正在被用作操作系统的缓存。

▪ swap:显示交换活动:每秒有多少块正在被换入(从磁盘)和换出(到磁盘)。

▪ io:显示了多少块从块设备读取(bi)和写出(bo),通常反映了硬盘I/O。

▪ system:显示每秒中断(in)和上下文切换(cs)的数量。

▪ cpu:显示所有的cpu时间花费在各类操作的百分比,包括执行用户代码(非内核),执行系统代码(内核),空闲以及等待IO。

每2秒采样1次,总计10次 #vmstat 2 10

系统性能分析工具 sar

PS:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值