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