In *nix, what causes "sleeping" in top command?
A process is sleeping when it is blocked, waiting for something. For example, it might have called read()
and is waiting on data to arrive from a network stream.
sleep()
is indeed one way to have your process sleep for a while. Sleeping is, however, the normal state of all but heavily compute-bound processes - sleeping is essentially what a process does when it isn't doing anything else. It's the normal state of affairs for most of your processes to be sleeping - if that's not the case, it tends to indicate that you need more CPU horsepower.
A sleeping process is like suspended process.A process sleeps when:
- It's doing an I/O operation (blocking for I/O)
- When you order it to sleep by sleep()
The status of any process can be:
- Ready: when it ready for execution and it's in the queue waiting the processor call with specific priority
- Sleeping: When it was running and it was blocked for I/O operation or when executing sleep()
- Running: When the processor executes a process it becomes running.
Status Meaning
R Runnable
T Stopped
P Waiting on Pagein
D Waiting on I/O
S Sleeping < 20 seconds
I Idle - sleeping >20 seconds
Z Zombie or defunct
They are processes which aren't running on the CPU right now. This is not necessarily a bad thing.
If you have huge numbers (10,000 on a server system, for example) of processes sleeping, the amount of memory etc used to keep track of them may make the system less efficient for non-sleeping processes.
Otherwise, it's fine.
Most normal server systems have 100 to 1000 much of the time; this is not a big deal.
Just because they're not doing anything just now doesn't mean they won't, very soon. Keeping them in memory, ready, reduces latency when they are required.