`

ma系列之-22-进程 ps top 作业管理

 
阅读更多

 

 

0  进程相关概念和线程

 

内核负责追踪每一个进程的状态信息  
内核数据结构 task structure ,里面保存每个进程的数据结构,比如数据扇区位置,父进程号,当前进程号,操作者等

在某一时刻,内存是被分成两段的,一段是内核空间,一段是用户空间,用户空间里面有多少个用户进程,
而每个进程对应的结构都会在内核空间中有相对应的一段来保存,CPU的寄存器会保存每个进程task structure的地址位置。
每个中间挂起的进程在重新加载到CPU的时候,CPU会根据寄存器存储的进程task structure地址找到task structure,
然后进而得到task structure内存储的当前启动进程对应在磁盘的数据位置和开始执行位置,这个过程就是恢复现场。

程序: 可执行文件,位于磁盘上
进程: 程序被装载入内存,在内存中提供的特定区域内存放需要的数据和指针,是一个逻辑概念,而不是一个实体

堆内存: 过一会打开一个文件需要创建一个空间,过一会打开一个文件需要创建一个空间,根据需要不停动态申请内存空间,就叫做堆内存。
栈: 本地变量

每一次内核装载进程的时候,必须要把进程的页面翻译成物理内存的叶匡(真实分配给进程逻辑连续内存对应的分散物理内存地址区域)
将进程页面翻译成物理内存叶匡的过程是交给MMU来操作,你可以联想记忆为:
页面 叶匡  MMU
域名 IP地址 路由器


进程上下文切换: 就是不同进程不断的装载到CPU和退出CPU的过程

 

进程在内存中区域:



 

 

 

1 进程状态:

 

进程生命周期: 类比于人一天24小时,睡觉时间,娱乐时间,工作时间等,因此执行时间和挂起时间组成了一个进程的生命周期
多核CPU: 仅仅是在多进程下,将进程分配到不同的CPU下排队执行,而不仅仅是放在一个CPU下来排队,这样来解决了每个进程的处理速度。

 

进程状态截图如下:


 

部分解释:

进程睡眠: 因为需要的资源没有正常获取到 或者没有其他更多事情可以去做了  比如当前进程分配给CPU4ms,读取一个文件需要3s 那么进程会睡眠
Uninterruptible sleep: 不可中断的睡眠  就是当前请求的资源比如文件加载到内存耗时较长,即使当前CPU继续分配时间片给当前进程 因为需要文件还没有加载进来因此进程依旧不可唤醒
Interruptible sleep:可中断睡眠  随时来请求 随时能唤醒  比如处理完当前请求后暂时还没有更多请求下,这种sleep就是可中断

Zombie: 僵死进程,进程正常进行,也结束掉了,但是占用的内存没有释放,在这种情况下,会由它的父进程来收尸
进程结束: 1占用内存空间释放 2task structure内对应进程数据删除

进程父子关系:
linux的进程都是父子关系,祖先进程是 init进程(联想与上帝),上帝照着自己的样子clone出子孙,这就是 具体任务子进程。 init进程是由内核来生成
eg:
[root@chinadaas13 ~]# pstree
init─┬─abrtd
     ├─acpid
     ├─atd
     ├─auditd─┬─audispd─┬─sedispatch
     │        │         └─{audispd}
     │        └─{auditd}
     ├─automount───4*[{automount}]
     ├─bonobo-activati───{bonobo-activat}

 

 

2 进程和多线程关系:

 

多线程: 以数据库为例,三个人访问同一个表,如果处理成三个进程,那么在每个进程的内存空间中,这个表的数据都要放在内存中,这样就有了三份同样的数据
         实际消耗了很多内存空间,这就是进程之间不共享数据的真实案例。
		 如果是线程,那么这三个线程共享同一份数据,在一个进程中维系多个线程,需要在这些线程之间同步来平均这些资源,并监控每个资源是否被加锁(防止死锁)

 


 

3 进程优先级:

 

 

进程优先级:
	0-139, 数字越小,优先级越高。
100-139:用户可控制
0-99:内核调整的

进程优先级分配有如下几种方式:
O:
 O(1): 固定不变的一个横线 联想于 0°直线    y=1在四象限的表示
 O(n): 所需要的时间长度随着队列长度而发生线性增长,可预测 可接受 联想于 45°直线   y=n 随着n增加而增加的线
 O(logn): y=logn 的线
 O(n^2): y=n平方的线
 O(2^n): y=2的n次方的线

优先级高,那么进程能够获得更高的运行时间,更有限获得CPU运行机会。

每个进程都有个nice值,范围在 -20--19之间,对应的进程数值为 100-139, 因此提高nice数值,就直接提高了进程优先级值,从而给别的进程让出了CPU执行权。
即nice值越小,优先级越高。
默认情况下,每个进程的nice数值为0,
nice联想于 人好的话,那么这个人就把机会让给别人。

 

 4 进程号和/proc

 

init进程号为1是固定的
其下每一个数字代表一个pid为对应数字的进程,每一个进程号码都是唯一的,即使这个进程退出,其他进程也不会占用这个号码,因此下面展示进程号是不连续的
[root@chinadaas13 ~]# ls /proc   器下的信息都是当前当前内核信息中的映射,而进入每个号码下面在ls的信息是内核中某个参数被映射成了文件,因此这下面东西是伪文件系统
1     140    179   1995   234    2533  258   2621   2740  29     32    3752  4624  643   8503
.... 
[root@chinadaas13 ~]# ls /proc/140 
ls: 无法读取符号链接/proc/140/exe: 没有那个文件或目录
attr       clear_refs       cwd      fdinfo    maps       mountstats  oom_score      root       smaps  status
autogroup  cmdline          environ  io        mem        net         oom_score_adj  sched      stack  syscall
auxv       coredump_filter  exe      limits    mountinfo  numa_maps   pagemap        schedstat  stat   task

 

 

5 进程相关命令ps pidof  pgrep  pstree:

 

ps: Process State 查看进程状态的专用命令
 SysV风格:每个选项都要加-来分隔
 BSD风格:
 
 a: 所有与终端有关的进程 
 u: 显示进程的启动用户
 x: 所有与终端无关的进程
 
进程的分类:
 跟终端相关的进程,即通过命令行进入的
 跟终端无关的进程

eg:
[root@chinadaas13 ~]# ps aux | head
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  19360  1536 ?        Ss   Oct22   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Oct22   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Oct22   0:00 [migration/0]
root         4  0.0  0.0      0     0 ?        S    Oct22   0:02 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S    Oct22   0:00 [migration/0]
root         6  0.0  0.0      0     0 ?        S    Oct22   0:00 [watchdog/0]
root         7  0.0  0.0      0     0 ?        S    Oct22   0:00 [migration/1]
root         8  0.0  0.0      0     0 ?        S    Oct22   0:00 [migration/1]
root         9  0.0  0.0      0     0 ?        S    Oct22   0:02 [ksoftirqd/1]
对上述结果的解释
VSZ: 虚拟内存集
RSS: 常驻内存集
TTY:关联到哪个终端上去, ?表示和终端无关
TIME: 运行时真正占用CPU的时长
COMMAND:哪个命令占用的进程, []表示是一个内核线程
STAT:进程状态
进程状态字段含义:
 D:不可中断的睡眠
 R:运行或就绪
 S:可中断的睡眠
 T:停止
 Z:僵死
 
 <:高优先级进程
 N: 低优先级进程
 +:前台进程组中的进程
 l: 多线程进程
 s: 会话进程首进程


ps 
 -elF
 -ef
 -eF

[root@chinadaas13 ~]# ps -el | head     e表示所有进程
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0     1     0  0  80   0 -  4840 poll_s ?        00:00:01 init
1 S     0     2     0  0  80   0 -     0 kthrea ?        00:00:00 kthreadd
1 S     0     3     2  0 -40   - -     0 migrat ?        00:00:00 migration/0
1 S     0     4     2  0  80   0 -     0 ksofti ?        00:00:02 ksoftirqd/0
1 S     0     5     2  0 -40   - -     0 cpu_st ?        00:00:00 migration/0
5 S     0     6     2  0 -40   - -     0 watchd ?        00:00:00 watchdog/0
1 S     0     7     2  0 -40   - -     0 migrat ?        00:00:00 migration/1
1 S     0     8     2  0 -40   - -     0 cpu_st ?        00:00:00 migration/1
1 S     0     9     2  0  80   0 -     0 ksofti ?        00:00:02 ksoftirqd/1
对上述展示的解释
PRI: 优先级
NI: nice数值



ps -o PROPERTY1,PROPERTY2  -o表示 指定后面要专门显示的参数值
eg: 
[root@chinadaas13 ~]# ps -o pid,comm,ni
  PID COMMAND          NI
 8890 bash              0
31157 ps                0


 
 
pstree: 显示当前系统上的进程树
pgrep:eg pgrep bash 找进程中有bash的进程
pidof: 根据程序名称,查找其相关进程的ID号;
[root@chinadaas13 ~]# pidof java
31586 31581 29602 21179 18000 15917 9385 7846

 

 

6 进程命令之 top:

 

top:类似于window的任务管理器,间隔5秒不停刷出
[root@chinadaas13 ~]# top  
top - 14:40:33 up 7 days, 37 min,  4 users,  load average: 0.12, 0.23, 0.25
Tasks: 684 total,   1 running, 683 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.5%sy,  0.0%ni, 99.1%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  65961460k total, 14694752k used, 51266708k free,   352200k buffers
Swap: 20479992k total,        0k used, 20479992k free,  1353244k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                      
15305 root      20   0 15428 1732  952 R  1.0  0.0   0:00.34 top                                                          
 9385 root      20   0 4052m 308m  30m S  0.7  0.5   9:26.16 java                                                         
15917 mapred    20   0 4710m 146m  14m S  0.7  0.2  15:34.41 java                                                         
18000 root      20   0 17.9g 317m   9m S  0.7  0.5   0:17.52 java    

如下是对上述显示结果解释:
top后为当前时间
up后时间表示运行时长,从上一次启动到这一刻为止时长
4 users表示登录用户
load average: 0.12, 0.23, 0.25 平均负载,过去1,5,15分钟下的队列平均长度,长度越小,则CPU负载越低。
Tasks: 所有进程相关信息, 一个在运行,683个在睡觉,0个停止,0个僵死
Cpu(s): 多个CPU平均值 us用户空间用户进程占据cpu的百分比  sy系统空间占据cpu的百分比    ni调整nice值影响的cpu比例 id空闲百分比  wa等待io完成所占用的时间 hi硬件中断占据的时间
		si 软中断占据的时间  st被偷走的时间 
 
上述结果 可以通过 uptime来简单实现:
[root@chinadaas109 ~]# uptime
 00:26:56 up 100 days,  5:16,  4 users,  load average: 0.21, 0.32, 0.26


PR: 表示优先级



top: 部分字段解释如下, 只需要在 top输入的显示结果后 在输入M/P/T 命令 就会自动按照内存大小排序展示
 M: 根据驻留内存大小进行排序
 P:根据CPU使用百分比进行排序
 T: 根据累计时间进行排序
 
 l: 是否显示平均负载和启动时间    只需要在 top输入的显示结果后 在输入l/t/m 命令 就会自动显示或者隐藏相关项数据
 t: 是否显示进程和CPU状态相关信息
 m: 是否显示内存相关信息
 
 c: 是否显示完整的命令行信息(即完整命令路径)   
 q: 退出top
 k: 终止某个进程


top 
 -d: 指定延迟时长,单位是秒
 -b: 批模式
 -n #:在批模式下,共显示多少批

 

 

7 进程间通信和 kill :

 

进程间通信方式(IPC: Inter Process Communication)
 1 共享内存 , 一个进程向内存中写,另一个进程从这个内存中读
 2 信号: Signal 一个进程向另一个进程发送信号来控制另外一个进程
 3 Semaphore 旗语
 
以方式2信号为例, kill通常都是用于进程之间发送信号 
[root@chinadaas13 ~]# help kill
kill: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
    Send a signal to a job.
[root@chinadaas13 ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
	
kill中重要的几个信号:
1:SIGHUP: 让一个进程不用重启,就可以重读其配置文件,并让新的配置信息生效;
2: SIGINT:Ctrl+c: 中断一个进程
9: SIGKILL:杀死一个进程, 并强制立马执行,即使当前进程有比如写入文件操作,那么也立即执行,立马杀死
15: SIGTERM:终止一个进程, 默认信号,杀死之前,让这个进程先交代后事,然后处理完后事后再弄死这个进程

  
指定一个信号:
 信号号码:eg---> kill -1
 信号名称:eg---> kill -SIGKILL
 信号名称简写:eg---> kill -KILL

使用如下:
kill PID
killall COMMAND进程名    killall httpd 杀死所有httpd,取代了一个个的来执行httpd对应的进程号的杀死

 

 8 调整nice值:


调整已经启动的进程的nice值:
renice NI PID


在启动时指定nice值:
nice -n NI COMMAND

 

 

9  前台作业 后台作业:

 

 Ctrl+z: 把正在前台的作业送往后台
 COMMAND &:让命令在后台执行
 
bg: 让后台的停止作业继续运行   backgroud
 bg [[%]JOBID]


jobs: 查看后台的所有作业
 作业号,不同于进程号
 +:命令将默认操作的作业
 -:命令将第二个默认操作的作业
 
fg: 将后台的作业调回前台  frontgroud
 fg [[%]JOBID]

 

 

10 vmstat 和查看系统内存

 

虚拟内存  系统状态查看命令


[root@chinadaas109 ~]# vmstat 1  1表示每间隔1秒钟显示一次  
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0 8400188 11107092 695044 60202828    0    0    10    54    0    0  2  1 96  0  0

 r: 运行队列长度
 b: 阻塞队列长度
 swpd: 交换空间大小
 free:空闲内存
 buff: 缓冲
 cache: 缓存
 swap: 动态
 si: 从物理空间有多少页面到swap
 so: 从物理空间到swap导出多少
 bi: 有多少磁盘块调入到内存中
 bo: 有多少磁盘块从内存中同步到磁盘上
 in: 中断个数
 cs: context switch 上下文进程切换次数
 us: 用户空间占据CPU百分比
 sy: 内核空间占据CPU百分比
 id:空闲 
 wa: 等待IO
 st: 被偷走的CPU时间
 
# vmstat 1 5 表示间隔1秒显示一次 一共显示5次 
 
 
 
[root@chinadaas109 ~]# cat /proc/meminfo  
MemTotal:       132089436 kB
MemFree:        53439820 kB
Buffers:          702300 kB
Cached:         61056300 kB
SwapCached:        44716 kB
Active:         17207024 kB
Inactive:       59399112 kB
Active(anon):    9954564 kB
Inactive(anon):  4893312 kB
Active(file):    7252460 kB

 

  • 大小: 95.8 KB
  • 大小: 67.8 KB
分享到:
评论

相关推荐

    4-20mA转0-3.3V

    使用multisim搭建并仿真了4-20mA信号转换为0-3.3V电压的电路。实际证明有效可用。

    顺源科技4-20mA转0-5V芯片

    顺源科技推出的4-20mA转0-5V芯片属于ISOEM系列直流信号隔离放大器,该系列芯片能够实现不同类型的电压与电流信号间的隔离、放大以及转换。这种芯片特别适用于工业自动化领域中的信号处理与传输需求。 #### 二、产品...

    4-20ma转0-3.3v模块设计文档

    4-20mA到0-3.3V转换模块是一种常见的工业信号转换设备,它能够将标准的4-20mA电流信号转换为适合微处理器或数字电路处理的0-3.3V电压信号。这种转换在自动化系统、传感器数据采集、过程控制等领域有着广泛的应用。...

    DIN3系列4-20mA(0-20mA)电流环路隔离器:DIN3 ISO 4-20mA.pdf

    DIN3系列4-20mA(0-20mA)电流环路隔离器是一种专门用于工业现场的信号处理设备,它能够实现传感器、PLC(可编程逻辑控制器)等设备之间的信号隔离与转换。该设备的设计遵循低成本、小体积与高精度的标准,采用DIN35...

    华为OLT-MA5680T-GPON开局指导-配置指南.doc

    华为OLT-MA5680T-GPON开局指导-配置指南 本文档提供了华为OLT-MA5680T-GPON开局指导的配置指南,涵盖了GPON开局指导、业务配置、数据规划、GPON配置的一些概念等内容。 一、业务配置 在业务配置中,我们需要创建...

    电压电流采集(0-5V0-10V0-20mA4-20mA)电容隔离输出(0-5V0-10V)原理图及PCB

    描述:本设计采用APC(GP9303M-F1K-N-SW)芯片来实现对0-5V/0-20mA/4-20mA的信号采集,采用APC(GP9301BXIM-F1K-N-SW)芯片来实现对0-10V信号进行采集。然后在芯片内部完成信号的高频调制,调制好的高频信号经过电容...

    02_Artix FPGA DDR控制器MIG使用(AXI4)(MA703FA-35T)20190401.pdf

    02_Artix FPGA DDR控制器MIG使用(AXI4)(MA703FA-35T)20190401.pdf 02_Artix FPGA DDR控制器MIG使用(AXI4)(MA703FA-35T)20190401.pdf

    4-20ma0-10v转0-15v/0-24v/0-200ma/0-700ma/0-2a大功率阀门驱动控制器、变送器

    标题中的“4-20ma0-10v转0-15v/0-24v/0-200ma/0-700ma/0-2a大功率阀门驱动控制器、变送器”指的是一个工业级的信号转换和驱动设备,主要用于将4-20mA或0-10V的信号转换为不同范围的电压或电流信号,以驱动大功率的...

    4-20mA转0-10V二进二出信号隔离分配器.pdf

    &gt;&gt;国际标准二路信号输入:0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等 &gt;&gt;二路输出标准信号:0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等,具有高负载能力 &gt;&gt;全量程范围内极高的线性度(非线性度) &gt;&gt;标准DIN35 导轨式安装...

    0-1000℃/K型热电偶转4-20mA或0-5V温度变送器,转换模块

    【热电偶温度变送器】是工业自动化领域中常用的一种设备,用于将传感器(如热电偶或热电阻)检测到的温度信号转换为标准的电信号,如4-20mA或0-5V。这样的转换对于远程传输和与控制系统集成至关重要,因为标准信号在...

    模拟信号4-20mA转RS-485/232,数据采集A/D转换模块

    IBF系列产品可应用在 RS-232/485总线工业自动化控制系统,4-20mA / 0-5V信号测量、监测和控制,0-75mV,0-100mV等小信号的测量以及工业现场信号隔离及长线传输等等。 产品包括电源隔离,信号隔离、线性化,A/D转换和...

    21级应用统计本科班-郝恩慧-第一次作业.ma\21级应用统计本科班-郝恩慧-第一次作业

    21级应用统计本科班-郝恩慧-第一次作业.ma\21级应用统计本科班-郝恩慧-第一次作业

    GPON组网与华为MA5800-X15 OLT配置.docx

    GPON 组网与华为 MA5800-X15 OLT 配置 GPON(Gigabit Passive Optical Network,吉比特被动光网络)是一种基于被动光网络的光纤接入技术,主要用于光纤到家(FTTH)和光纤到大楼(FTTB)等应用场景。华为 MA5800-...

    4-20mA TO 0-20mA CONVERTER AND CURRENT SUMMING CURRENT-TO-CURREN

    Burr-Brown提供了一系列完整的单片4mA至20mA电流环路发射器和接收器。 #### 一、4-20mA电流环路基础知识 电流环路通常用于工业自动化领域中的信号传输,其中最常用的为4-20mA标准。该标准的最小信号电流为4mA,这...

    0-5V/0-10V/0-20mA/4-20mA采集 0-20mA/4-20mA信号隔离输出电路-电路方案

    PAC芯片完成0-5V/0-10V/0-20mA/4-20mA转0-20mA/4-20mA的信号转换,内置隔离电源,隔离度1500VDC 原理是,采用APC(GP9303-F1K-N-SW)芯片来实现对0-5V/0-20mA/4-20mA的信号采集,采用APC(GP9301BXI-F1K-N-SW)芯片...

    MA5671-GP4 V800R016C10SPH216.zip

    《MA5671-GP4 V800R016C10SPH216.zip:华为MA5671 GPON光猫软件更新详解》 华为MA5671-GP4是一款高性能的GPON光网络单元(ONT),在现代光纤宽带接入网络中扮演着至关重要的角色。其软件版本V800R016C10SPH216是...

    MA5606T-开局配置总结.doc

    MA5606T开局配置总结 MA5606T开局配置总结文档是Huawei公司的EPON设备开局配置详细说明。该文档旨在指导用户正确地配置MA5606T设备,以便实现快速、可靠的网络部署。 语言设置 MA5606T设备支持多种语言,包括简体...

    数据分析ma-jing-data-analysis-system-main.zip

    数据分析ma-jing-data-analysis-system-main.zip

Global site tag (gtag.js) - Google Analytics