Date: Thu, 10 Jun 2010 03:30:14 +0200 From: Pieter de Goeje <pieter@degoeje.nl> To: freebsd-questions@freebsd.org Cc: Eitan Adler <lists@eitanadler.com>, questions@freebsd.org Subject: Re: why does ps |grep sometimes not return itself? Message-ID: <201006100330.14618.pieter@degoeje.nl> In-Reply-To: <4C0F4410.40900@infracaninophile.co.uk> References: <AANLkTimdtot-1vlYofXo-dv3V7jyFW7VU0D6dq3vqBqV@mail.gmail.com> <4C0F4410.40900@infracaninophile.co.uk>
next in thread | previous in thread | raw e-mail | index | archive | help
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@AlphaBeta ~ ]% ps aux|grep Me > > eitan 96325 0.0 0.0 1856 724 5 RL+ 10:14AM 0:00.00 grep Me > > [eitan@AlphaBeta ~ ]% ps aux|grep Me > > [eitan@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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201006100330.14618.pieter>