linux进程管理

  进程(Process)是一个程序在其自身的虚拟地址空间中的一次执行活动。之所以要创建进程,就是为了使多个程序可以并发的执行,从而提高系统的资源利用率和吞吐量。

  程序只是一个静态的指令集合;而进程是一个程序的动态执行过程,它具有生命期,是动态的产生和消亡的。


进程家族

   引导系统时,Linux内核的一个职责是启动第一个进程(通常是/sbin/init)。因为一个页已存在的进程继续派生,所有其他进程得以启动。

如何终止进程

   当进程终止时,可能是通过选择退出(exit)正常终止,也可以是因为接收到信号而非正常终止。

孤儿进程。

   如果说处理子进程终止后的善后事宜是父进程的职责的话,那么如果父进程在子进程之前终止该怎么办?这个子进程就变成了孤儿进程。

僵尸进程

   当进程退出,释放大多数资源和它的父进程收集它的返回值、释放剩余资源这两段时间之间,子进程处于一个特殊状态,被称为僵尸进程(zombie)。每个进程都会经过一个短暂的僵尸状态。


五种进程状态:

可运行(R)

   处于可运行状态的进程,一旦有机会,就会访问CPU。多个进程可以(而且经常)处于可以运行状态,但是因为在任何给定时间内只有一个进程可以在CPU上运行,所以实际上这些进程中只有一个在任何给定的实例上运行。

自愿(可中断的)睡眠(s)

   从名称中可以看出,处于自愿睡眠状态的进程选择处于该状态。通常,这一进程在某事发生之前无事可做。

非自愿(不可中断或强制)睡眠

   内核迫使进程进入非自愿睡眠状态。该进程并没有选择休眠,它情愿运行以便做完事情。当资源被释放时,内核会唤醒进程并将设置为可运行状态。

停止的(挂起的)进程(T)

   用户有时决定挂起进程,被挂起的进程在被用户重新启动前不会执行任何操作。

僵尸进程(Z)

   每个快要终止的进程会经历一个短暂的僵尸状态,然而有时有些进程会一直停留在僵尸状态。


进程优先级:

   实时优先级(1,99数字越大,优先级越高)

   用户优先级(100-139数字越小,优先级越高)(-20,19)


调整优先级:

nice

[root@localhost libvirt]# nice -n -21 ping -c 500 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.259 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.072 ms

查看优先级(NI):

[root@localhost 桌面]# ps -lef  | awk  '$0~/[p]ing/||NR==1'
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root     28787  3118  0  60 -20 - 26337 skb_re 14:09 pts/0    00:00:00 ping -c 500 localhost


renice

[root@localhost 桌面]# renice 19 -u root -p 28935
0: old priority -20, new priority 19
28935: old priority 19, new priority 19
[root@localhost 桌面]# ps -lef  | awk  '$0~/[p]ing/||NR==1'
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root     28935  3118  0  99  19 - 26337 skb_re 14:16 pts/0    00:00:00 ping -c 500 localhost


chrt

[root@localhost 桌面]# ps -lef  | awk  '$0~/[p]ing/||NR==1'
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root     29056  3118  0  78  -2 - 26337 skb_re 14:24 pts/0    00:00:00 ping -c 500 localhost
[root@localhost 桌面]# chrt -p -f 1 29056
[root@localhost 桌面]# ps -lef  | awk  '$0~/[p]ing/||NR==1'
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root     29056  3118  0  58   - - 26337 skb_re 14:24 pts/0    00:00:00 ping -c 500 localhost


chrt -p 指定PID

    -r set policy to SCHED_RR (default)

    -f set policy to SCHED_FF


使用vmstat查看进程相关信息:

[root@localhost 桌面]# vmstat  1  5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 502596  25676 187264    0    0   211     8   83  164  2  2 93  3  0  
 0  0      0 502580  25676 187264    0    0     0     0   51   93  0  0 100  0  0 
 1  0      0 502580  25676 187264    0    0     0     0   53  100  1  0 99  0  0  
 0  0      0 502580  25684 187260    0    0     0    20   40   78  0  1 99  0  0  
 0  0      0 502580  25684 187264    0    0     0     0   53  109  0  1 99  0  0


procs

r: 等待运行的进程数

b: 处在非中断睡眠状态的进程数

w: 被交换出去的可运行的进程数。此数由 linux 计算得出,但 linux 并不耗尽交换空间


       硬中断:是由与系统相连的外设(比如:网卡、硬盘)自动产生的。主要是用来通知操作系统外设状态的变化。比如当网卡收到数据包的时候,就会发出一个中断。

       软中断:我们知道,为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理时间比较长的工作,放到中断之后来完成,也就是软中断中来完成。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章