Linux--进程!

Posted handsomeboy-东

tags:

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

进程概述

程序:通常为二进制程序,以物理文件方式储存在硬盘中
进程:一个程序触发时,程序的代码和数据会加载到内存中运行,并产生一个随机的pid,这个在运行的程序就是一个进程,一个程序有可能产生多个进程,进程由CPU处理,CPU同一时刻只能处理一个进程

  • 父进程和子进程:每个进程都有父进程,然后由父进程产生一个同样的子进程,父进程的唯一标识符为ppid,子进程的唯一标识符为pid
  • 子进程完成任务后会自杀并发消息给父进程,由父进程回收子进程占有的资源,如果父进程没有收到消息,子进程就会变为僵尸进程(不会自杀,一直在占用资源),此时可以杀死其父进程,让子进程变为孤儿进程(父进程失效,子进程仍在),孤儿进程后会变为系统的第一个产生的进程systemd的子进程
  • 一个进程有一个或多个线程,两个不同进程分配了不同的内存空间基本不能同时通信,但是同一个进程下的不同线程可以互相访问

系统进程的查看

ps -elf :静态查看系统进程
ps aux :静态查看系统进程
ps -o user,pid :指定内容类型来查看进程内容
pstree :看进程树
pstree -u  :在进程树查看进程由哪个用户产生使用
pstree -p :在进程树中显示进程的pid
pgrep -l 进程名 :查看进程号
pgrep -u 用户名 -l 进程名 :查看用户的进程的进程号
kill 进程号 :杀死进程,给进程一个缓解过程,等进程把任务做完
kill -9 进程号:强制杀死进程
kill -l :显示kill能够使用的选项
killall :杀死进程,包括其子进程
jobs :看后台进程
top :动态查看系统进程,默认3s刷新列表,会进入一个交互模式,按M表示按内存大小排序,按N表示按PID排序,按q退出,按s更改刷新时间
top -d 5 :进入动态查看系统进程的交互模式,并直接设置刷新时间为5
top -p pid号 :查看单独进程
fg 后台任务号 :将后台任务放在前台处理
bg 后台任务号 :后台任务恢复执行
[root@AIDEBOY ~]# ps -elf | head
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root          1      0  0  80   0 - 48487 ep_pol 5月11 ?       00:00:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
1 S root          2      0  0  80   0 -     0 kthrea 5月11 ?       00:00:00 [kthreadd]
1 S root          3      2  0  80   0 -     0 smpboo 5月11 ?       00:00:01 [ksoftirqd/0]
1 S root          5      2  0  60 -20 -     0 worker 5月11 ?       00:00:00 [kworker/0:0H]
1 S root          7      2  0 -40   - -     0 smpboo 5月11 ?       00:00:00 [migration/0]
1 S root          8      2  0  80   0 -     0 rcu_gp 5月11 ?       00:00:00 [rcu_bh]
1 S root          9      2  0  80   0 -     0 rcu_gp 5月11 ?       00:00:16 [rcu_sched]
1 S root         10      2  0  60 -20 -     0 rescue 5月11 ?       00:00:00 [lru-add-drain]
5 S root         11      2  0 -40   - -     0 smpboo 5月11 ?       00:00:00 [watchdog/0]
[root@AIDEBOY ~]# ps aux | head
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 193948  7088 ?        Ss   5月11   0:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    5月11   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    5月11   0:01 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   5月11   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S    5月11   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    5月11   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        S    5月11   0:16 [rcu_sched]
root         10  0.0  0.0      0     0 ?        S<   5月11   0:00 [lru-add-drain]
root         11  0.0  0.0      0     0 ?        S    5月11   0:00 [watchdog/0]

查看的内容:

  • F:表示进程标识,说明此进程的权限,4表示此进程权限为root,1表示此子进程仅执行复制而没有实际执行
  • S和STAT:表示此进程的状态,进程的状态分为五种
    1)R(Running):运行状态
    2)S(Sleep):表示可中断的睡眠状态
    3)D:表示不可中断的睡眠状态
    4)T:停止状态
    5)Z:僵尸状态
    STAT的第二位表示:<表示有高优先级,+表示当前进程运行在前台,N表示低优先级,l表示多线程,s表示控制进程
  • C(CPU):表示占CPU的利用率
  • PRI/NI:(priority/nice),这两个值的和表示此进程被CPU处理的优先级,优先级越小,越先被CPU处理,PRI不可更改,可以更改NI来调整此进程的优先级
  • ADDR/SZ/WCHAN:都与内存有关,ADDR表示该进程在内存的哪个部分,如果是个running的进程,一般会显示【-】,SZ表示该进程用掉了多少内存,WCHAN表示进程是否运行,【-】表示正在运行
  • TTY:表示登录的终端,有tty1-6,可以按Ctrl+Alt+F1-6来切换不同的终端,如果这里是pts/n表示为远程登录使用终端
  • TIME:表示进程花费CPU运行的时间
  • CMD(COMMAND):触发该进程的实际命令
  • START:表示该进程被触发启动时间
  • RSS:实际占用物理内存
  • MEM:占物理内存百分比
[root@AIDEBOY ~]# top     
top - 15:48:38 up 1 day,  4:38,  2 users,  load average: 0.00, 0.01, 0.11
Tasks: 231 total,   1 running, 230 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  5.3 sy,  0.0 ni, 94.4 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem :  1863248 total,   123168 free,   776068 used,   964012 buff/cache
KiB Swap:  3145724 total,  3145460 free,      264 used.   789200 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                         
  6395 polkitd   20   0  616516  15072   5164 S  13.0  0.8  33:21.15 polkitd                                                         
  6345 dbus      20   0   70996   4556   1964 S   9.0  0.2  25:34.26 dbus-daemon                                                     
  6330 root      20   0  396592   4316   3380 S   8.6  0.2  21:29.24 accounts-daemon                                                 
  8195 root      20   0  456912   5592   2920 S   2.3  0.3   7:34.42 gsd-account                                                     
     9 root      20   0       0      0      0 S   0.3  0.0   0:22.05 rcu_sched                                                       
 27283 whd       20   0  160848   2592   1236 S   0.3  0.1   0:00.60 sshd                                                            
     1 root      20   0  193948   7088   4164 S   0.0  0.4   0:07.07 systemd                                                         
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.12 kthreadd                                                        
     3 root      20   0       0      0      0 S   0.0  0.0   0:01.70 ksoftirqd/0                                                     
     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                                                    
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.22 migration/0                                                     
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh                                                          
    10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain                                                   
    11 root      rt   0       0      0      0 S   0.0  0.0   0:00.67 watchdog/0                                                      
    12 root      rt   0       0      0      0 S   0.0  0.0   0:00.65 watchdog/1                                                      
    13 root      rt   0       0      0      0 S   0.0  0.0   0:00.80 migration/1                                                     
    14 root      20   0       0      0      0 S   0.0  0.0   0:01.79 ksoftirqd/1                                                     
    16 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H  

注释:
1)第一行表示的意思:
目前的时间 15:48:38,开机到限制所经过的时间up 1 day, 4:38,以及登陆系统的用户人数 2 users,
load average: 0.00, 0.01, 0.11:系统在1分钟、5分钟、15分钟的平均负载,数值越小表示系统越闲置,大于1就得注意系统进程是否太繁忙了
2)第二行表示目前进程的总量以及其他状态进程的数量,要注意zombie这个数值,如果不是0表示有僵尸进程
3)第3行:CpusCPU相关信息,如果是多核 CPU,按数字1可显示各核CPU信息,此时1行将转为Cpu核数行,数字1可以来回切换。

  • 第1段:us用户空间占用CPU百分比
  • 第2段:sy内核空间占用CPU百分比
  • 第3段:ni用户进程空间内改变过优先级的进程占用CPU百分比
  • 第4段:id空闲CPU百分比
  • 第5段:wa(wait)等待输入输出的CPU时间百分比,表示i/o wait,通常系统会变慢都是i/o产生的问题比较大,要注意这个耗用的CPU资源
  • 第6段:hiCPU服务于硬件中断所耗费的时间总额
  • 第7段:siCPU服务软中断所耗费的时间总额
  • 第8段:stStealtime虚拟机被hypervisor偷去的CPU时间(如果当前处于一个hypervisor下 vm,实际上hypervisor也是要消耗一部分CPU处理时间的)
    4)第四行和第五行:表示目前的物理内存和虚拟内存(Mem/Swap)的使用情况,要注意如果swap的使用很多的话表示系统物理内存不足

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

linux c 退出进程的代码

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

java 简单的代码片段,展示如何将javaagent附加到运行JVM进程

代码片段:Shell脚本实现重复执行和多进程

LINUX操作系统知识:进程与线程详解

Linux系统进程的知识总结,进程与线程之间的纠葛...