why does ps |grep sometimes not return itself?

Pieter de Goeje pieter at degoeje.nl
Thu Jun 10 01:30:26 UTC 2010


On Wednesday 09 June 2010 09:34:40 Matthew Seaman wrote:
> On 09/06/2010 08:15:23, Eitan Adler wrote:
> > Why do I sometimes see the grep in ps's output and sometimes not see it?
> > [eitan at AlphaBeta ~ ]% ps aux|grep Me
> > eitan 96325  0.0  0.0  1856   724   5  RL+  10:14AM   0:00.00 grep Me
> > [eitan at AlphaBeta ~ ]% ps aux|grep Me
> > [eitan at AlphaBeta ~ !1! ]%
>
> When you run that pipeline the OS doesn't start both programs exactly
> simultaneously. It starts ps(1) first, then grep(1) together with
> creating the pipeline by connecting ps's stdout to grep's stdin.
> Depending on system load and various other factors, this may allow ps(1)
> to grab the snapshot of the process table that it works on before
> grep(1) has started.  It's a race condition.
>
> Whether you see this effect or not will depend very much on system
> conformation and load.  I can't reproduce the effect on a lightly loaded
> dual processor machine, which always shows the grep process, whereas on
> a single processor virtual machine running under VirtualBox, I never see
> grep in the ps output unless I renice the ps(1) process.
>

I would like to add that you can avoid the issue entirely by using this 
command:
% ps aux -p `pgrep sh`
USER    PID %CPU %MEM   VSZ   RSS  TT  STAT STARTED      TIME COMMAND
root   1326  0.0  0.1  6680  3664  ??  Is    1:09AM   0:00.00 /usr/sbin/sshd
pyotr  1460  0.0  0.1  3972  2696  v0  I     1:09AM   0:00.02 -zsh (zsh)

-- 
Pieter de Goeje


More information about the freebsd-questions mailing list