在* nix中,什么导致顶级命令中的“睡眠”?

时间:2010-10-04 09:02:30

标签: php linux unix process top-command

我在sleeping中看到的这些top进程的原因是什么?如果我要调用PHP的sleep()函数,是否会增加sleeping中我看到的top计数? sleeping中的数字是否有任何缺点?

4 个答案:

答案 0 :(得分:19)

进程在被阻塞时正在休眠,等待某事。例如,它可能已调用read()并正在等待数据从网络流到达。

sleep()确实是让你的过程暂时休眠的一种方法。然而,睡眠是除了大量计算绑定过程之外的所有正常状态 - 睡眠本质上是一个过程在没有做任何事情时所做的事情。这是大多数进程正常睡眠的正常状态 - 如果的情况下,它往往表明你需要更多的CPU马力。

答案 1 :(得分:9)

睡眠过程就像暂停过程。 进程在以下情况下休眠:

  1. 正在执行I / O操作(阻止I / O)
  2. 当你通过睡眠命令它睡觉时()
  3. 任何流程的状态可以是:

    • 就绪:当它准备好执行时,它在队列中等待具有特定优先级的处理器调用
    • 睡眠:当它正在运行且被阻止进行I / O操作或执行睡眠时()
    • 正在运行:当处理器执行一个进程时,它就会运行。

    状态含义

    • R Runnable

    • T已停止

    • 等待Pagein

    • D等待I / O

    • S Sleeping< 20秒

    • 我闲着 - 睡觉> 20秒

    • Z Zombie或已解散

答案 2 :(得分:2)

它们是目前未在CPU 上运行的进程。这不一定是坏事。

如果您有大量的数据(例如,服务器系统上有10,000个)进程正在休眠,那么用于跟踪它们的内存量等可能会降低系统对非休眠进程的效率。

否则,没关系。

大多数普通服务器系统的大部分时间都在100到1000之间;这不是什么大问题。

仅仅因为他们现在没有做任何事情并不意味着他们不会很快。将它们保存在内存中,准备就绪,可在需要时减少延迟。

答案 3 :(得分:2)

为了进一步详细说明,S状态表示进程正在等待定时器或慢速设备,而D状态表示它正在等待快速设备。< / p>

快速设备与慢速设备的构成并不是很明确,但通常所有串行,网络和终端设备都是慢速设备,而磁盘则是快速设备。