进程(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为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理时间比较长的工作,放到中断之后来完成,也就是软中断中来完成。