zoukankan      html  css  js  c++  java
  • linux 进程管理

    理论
    (1)程序与进程
    程序:指令+参数通过逻辑控制运行起来,完成某项特定任务。
               静态的,封闭的。
    进程:程序运行起来的结果。
               操作系统运行的基本单位。
               有生命周期(产生---->死亡)
               进程有运行状态(running,sleepping,等待,僵死)
               并发性,交互性(管道)----共享内存,队列(kafka)。
    程序和进程不是以一一对应。

    (2)子进程和父进程
    子进程继承父进程的特性:安全性的身份认证;过去和当前的文件描述符,端口等资源特权;环境变量;程序代码。
    父进程------->fork()----->子进程
    子进  ------>exec()------>运行程序
    子进程-------->exit()------->退出

    (3)进程和线程
    对于linux而言,不严格区分,对于进程和线程都将拥有独立的一套完整资源集(内存---->虚拟内存,CPU------>时间片)。

    自学:协程;对比一下进程,线程协程

    管理工具
    ps

    [root@localhost ~]# ps aux |less
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.0 2164 648 ? Ss 08:47 0:00 init [5]

    USER: 运行进程的用户
    PID: 进程ID
    %CPU: CPU占用率
    %MEM: 内存占用率
    VSZ: 占用虚拟内存
    RSS: 占用实际内存 驻留内存
    TTY: 进程运行的终端
    STAT: 进程状态 man ps (/STATE)
    R 运行
    S 可中断睡眠 Sleep
    D 不可中断睡眠
    T 停止的进程
    Z 僵尸进程
    X 死掉的进程

    Ss s进程的领导者,父进程
    S< <优先级较高的进程
    SN N优先级较低的进程
    R+ +表示是前台的进程组
    Sl 以线程的方式运行
    START: 进程的启动时间
    TIME: 进程占用CPU的总时间
    COMMAND: 进程文件,进程名
    pstree:子进程与父进程关系
    pgrep: 查看进程号 
    pgrep sshd,
    pgrep -o sshd, 
    pgrep -n sshd,
    pgrep -l sshd

    killall:
    直接更进程名
    killall sshd
    kill ;
    后面更进程号
    kill 38438 
    pkill;
    可以跟终端,指定用户
    pkill -t pts/0
    pkill -u username

    killall,kill,pkill 都可发送信号

    top:
    [root@ds2 ~]# top
    top - 09:26:33 up 21:27,  4 users,  load average: 0.00, 0.01, 0.05
    Tasks: 101 total,   1 running,  99 sleeping,   1 stopped,   0 zombie
    %Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :   999696 total,   157452 free,   111628 used,   730616 buff/cache
    KiB Swap:  2097148 total,  2097148 free,        0 used.   681084 avail Mem

       PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                           
      29114 nginx     20   0   48492   2168    816 S  0.3  0.2   0:00.31 nginx                                             
      29129 root      20   0  157632   2128   1528 R  0.3  0.2   0:01.51 top                                               
          1 root      20   0   45924   6228   3864 S  0.0  0.6   0:04.40 systemd                                           
          2 root      20   0       0      0      0 S  0.0  0.0   0:00.02 kthreadd                                          
          3 root      20   0       0      0      0 S  0.0  0.0   0:01.42 ksoftirqd/0                                       
          5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                                      
          6 root      20   0       0      0      0 S  0.0  0.0   0:01.31 kworker/u256:0                                    
          7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0 

    参考:
    https://www.cnblogs.com/sbaicl/articles/2752068.html
    https://blog.csdn.net/yjclsx/article/details/81508455

    htop:

    (4)进程的前后台
    前台一次只能运行一个进程
    ping www.baidu.com >/dev/null 2>&1
    后台就可以运行多个进程
    若果程序有输出,输出内容任然会到终端上
    把一个进程放到后台执行
    ping www.baidu.com >/dev/null 2>&1 &

    (5)进程状态
    sleep --(S)可中断睡眠
              --(D)不可中断睡眠

    running --(ready)
                   --(内核)
                   --(用户)

    stop

    zombie ---(Z):资源已清理
                  ---(X):资源没清理

    进程状态间的切换 (*****)
    运行   -------------------------   就绪  ----------------------------- 等待
    (在CPU上运算)    (资源已分配,等待CPU空闲)           (事件未触发)
            ------时间片耗尽--------->         <-------------事件触发-----------   
         <-----进程调运或者系统调运--      
           -----------------------------等待事件发生------------------------>

    (6)进程优先级
    答案1 :7(0-6)  -----(错)
    0-6:系统运行级别:0--(关机) 1--(单用户) 2--(无网络的多用户) 3--(多用户) 4--(预留) 5--(图形化) 6--(重启)

    答案2 :40 (-20,+19)------(错)
    nice值--->相对优先级,(优先级度量)

    答案3 :40 (0-39) -------(错)
    top命令的PR值: 将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39

    答案4:
    0-139  (140)
    0-99 (100)系统进程优先级
    100-139  (40)用户优先级
    0------------------------------------------------99----------------------------139--------------->

    ----------------------------------------100----->--------------------------40-------------------->
              
                                                                             ------------------------------------------------->nice


    (7)nice调整

    r ----》PID---》回车----》nice值---》回车

    [root@ds2 ~]# ps axo command,pid,nice |grep sleep
    sleep 600                    28132  -5
    grep --color=auto sleep      28141   0
    [root@ds2 ~]# renice -20 28132
    28132 (进程 ID) 旧优先级为 -5,新优先级为 -20
    [root@ds2 ~]# ps axo command,pid,nice |grep sleep
    sleep 600                    28132 -20
    grep --color=auto sleep      28145   0

    (8)作业控制
    对于shell不会对进程做控制,对进程控制需要kill,killall,pkill,top --发信号。
    shell是对作业控制
        在终端上执行一条语句,就是一个作业。
        好多个进程完成一项任务,就是一个作业。

    在Shell前台一次只能运行一个作业,后台可运行多个。

    前台作业放后台: &,ctrl+Z(挂起)
    例如:sleep 600 &
                sleep 600  ctrl+Z

    把后台作业调到前台运行,fg
    例如:fg 作业号

    把后天停止的作业运行起来,bg
    例如:bg 作业号

    把后台作业终止,kill %
    例如: kill %作业号

    把后台作业进程杀死,kill -9 %  (kill可加信号)
    例如:kill -9 %作业号

    https://www.cnblogs.com/anttech/p/10597638.html

    (9)/proc,/sys 文件系统
    伪文件系统。
    https://www.cnblogs.com/anttech/p/10597671.html

  • 相关阅读:
    函数式宏定义与普通函数
    linux之sort用法
    HDU 4390 Number Sequence 容斥原理
    HDU 4407 Sum 容斥原理
    HDU 4059 The Boss on Mars 容斥原理
    UVA12653 Buses
    UVA 12651 Triangles
    UVA 10892
    HDU 4292 Food
    HDU 4288 Coder
  • 原文地址:https://www.cnblogs.com/anttech/p/12678698.html
Copyright © 2011-2022 走看看