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 进程管理

上一篇:Linux 网络概念介绍


下一篇:进程池非阻塞状态的使用