当我们输入top命令之后
其中S代表的是当前进程的状态
- R (Running 或 Runnable) 进程在CPU的就绪队列中,正在运行或者等待运行。
- D (Disk Sleep) 不可中断睡眠,进程正在跟硬件交互,不运行被其他进程或者中断打断。
- Z (Zombie) 进程已经结束,但是父进程没有回收资源 (描述符、PID等)
- S (Interruptible Sleep) 可中断状态睡眠,进程因等待某个事件而被系统刮起,比如IO阻塞等。
- I (Idle) 空闲状态,D状态会导致负载升高,但是I状态不会,为了区分,这种情况。
- T(Stop) 暂停或跟踪状态。
正常来说短时间的不可中断进程是没问题的,当出现大量不可中断进程,那么就会出现故障。
linux中,子进程是通过fork系统函数创建的,它应该通过系统调用 wait() 或者 waitpid() 等待子进程结束,回收子进程的资源。如果父进程没有调用,或者子进程执行太快,子进程提前退出,那么子进程就会成为僵尸进程。僵尸进程会用尽PID,导致不能创建新进程。