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

  • 相关阅读:
    Leetcode中级算法-二分查找01
    二叉查找树01(c++代码实现)
    Leetcode中级算法-动态规划03(最长上升子序列)
    Leetcode中级算法-动态规划02
    Leetcode中级算法-动态规划01
    Leetcode中级算法-全排列
    使用git获取Linux内核
    Kali 使用proxychains接管全局代理
    kali2020.1安装问题解决【选择并安装软件】
    unzip最常用使用方法
  • 原文地址:https://www.cnblogs.com/anttech/p/12678698.html
Copyright © 2011-2022 走看看