Date: Wed, 09 Dec 1998 16:51:57 -0800 From: Cy Schubert <cschuber@uumail.gov.bc.ca> To: Alfred Perlstein <bright@hotjobs.com> Cc: Alberto de Poo Bas <adepoo@tamnet.com.mx>, stable@FreeBSD.ORG Subject: Re: Weird Process Timings Message-ID: <199812100052.QAA22423@passer.osg.gov.bc.ca> In-Reply-To: Your message of "Wed, 09 Dec 1998 15:26:13 EST." <Pine.BSF.4.05.9812091522390.27793-100000@bright.fx.genx.net>
next in thread | previous in thread | raw e-mail | index | archive | help
In message <Pine.BSF.4.05.9812091522390.27793-100000@bright.fx.genx.net>
, Alfre
d Perlstein writes:
> On Wed, 9 Dec 1998, Alberto de Poo Bas wrote:
>
> >
> > I have a machine with 2.2.6 and the 31dec69 date it show when someone have
> > a process with bash. Maybe is something with bash?
> >
>
> Probably not, i don't see how bash could subvert the kernel... unless
> something was broken.
>
> that, and another friend is complaining about problems.
>
> I'm beginning to suspect someone messed up sysctl because someone just
> told me:
>
> "/usr/share/mk/bsd.port.mk", line 401: warning: "sysctl -n kern.osreldate"
> returned non-zero status
>
> something weird with pcbs? i don't have time to track it down, and told
> them to either ride out the problem (hoping someone takes notice) or cvsup
> backwards one week and try that.
I believe its got something to do with bash forking. Try;
ps aux > foo
ps aux | cat > foo
ps aux | cat | cat > foo
Notice that the number of "31Dec69" bash processes corresponds to the
number of pipes. Also notice that the cat processes are not listed. I
cannot duplicate this with sh or csh. I notice that pdksh will behave
the same as bash. Pdksh and bash are dynamically linked while sh and
csh are statically linked. I suspect that dynamic linking causes
fork() to be "slower" thereby allowing a window of opportunity to see
the shell listed in a ps listing before the process structures have
been completely set up. This can be proven by:
(sleep 1; ps aux) | cat | cat | egrep 'cat|bash'
or
(echo foo; ps aux) | cat | cat | egrep 'cat|bash'
Notice that the "31Dec69" processes go away and ps now runs after the
fork() has completed.
Without looking at the kernel source (and one of the FreeBSD wizards
can correct me here), I suspect that 4.4BSD is optimizing fork() by
allowing the parent to continue to run without having completely set up
the child while buffering output in the pipe until it is requested by
the child. It is an optimum way to manage throughput, with a minor
drawback.
Interestingly enough dynamically linked shells don't exhibit this under
Solaris, DUNIX, or Linux. Can this mean that 4.4BSD's fork() has
better throughput than the others? If that's the case, it's probably a
small price to pay.
Regards, Phone: (250)387-8437
Cy Schubert Fax: (250)387-5766
Open Systems Group Internet: Cy.Schubert@uumail.gov.bc.ca
ITSD Cy.Schubert@gems8.gov.bc.ca
Government of BC
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199812100052.QAA22423>
