
I'm planning on removing the exec from DoExec() and instead just
dispatch to the appropriate function.

I don't plan on any changes to the usage of "arguments" to this new
process, basically I'll just store them somewhere and then the forked
backend can process them.

Is there anything I should keep in mind?  I'd like this to eventually
be integrated into the source tree -- any particular reason why we use
exec() when we're just re-invoking the same binary?

p.s. this is so my ssl patch doesn't have to negotiate twice -- very expensive

Wed, 29 Apr 1998 18:20:55 -0700
Brett McCormickS <brett@abraxas.scene.com>
removing the exec() from doexec()
> 
> 
> I'm planning on removing the exec from DoExec() and instead just
> dispatch to the appropriate function.
> 
> I don't plan on any changes to the usage of "arguments" to this new
> process, basically I'll just store them somewhere and then the forked
> backend can process them.
> 
> Is there anything I should keep in mind?  I'd like this to eventually
> be integrated into the source tree -- any particular reason why we use
> exec() when we're just re-invoking the same binary?
> 
> p.s. this is so my ssl patch doesn't have to negotiate twice -- very expensive

No reason for the exec().  I believe the only advantage is that it gives
us a separate process name in the 'ps' listing.  I have looked into
simulating this.

This exec() takes 15% of our startup time.  I have wanted it removed for
many releases now.  The only problem is to rip out the code that
re-attached to shared memory and stuff like that, because you will no
longer loose the shared memory in the exec().  The IPC code is
complicated, so good luck.  I or others can help if you get stuck.

-- 
Bruce Momjian                          |  830 Blythe Avenue
maillist@candle.pha.pa.us              |  Drexel Hill, Pennsylvania 19026
  +  If your life is a hard drive,     |  (610) 353-9879(w)
  +  Christ can be your backup.        |  (610) 853-3000(h)

Wed, 29 Apr 1998 21:44:15 -0400 (EDT)
Bruce Momjian <maillist@candle.pha.pa.us>
Re: [HACKERS] removing the exec() from doexec()
On Wed, 29 Apr 1998, Bruce Momjian wrote:

> No reason for the exec().  I believe the only advantage is that it gives
> us a separate process name in the 'ps' listing.  I have looked into
> simulating this.

	Under FreeBSD, there is:

setproctitle(3) - set the process title for ps 1

	This isn't available under Solaris though, last I checked...

Marc G. Fournier                                
Systems Administrator @ hub.org 
primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org 


Wed, 29 Apr 1998 23:20:52 -0300 (ADT)
The Hermit Hacker <scrappy@hub.org>
Re: [HACKERS] removing the exec() from doexec()

sure enough..  well, try this on your OS and you can find out if perl
knows how to change it.  it doesn't work under solaris.  the args to
ps might be different for your system.

perl -e '$0 = "it_works!";system "ps -p $$"'

However, the args to the processes are so different that it seems easy
to tell the difference..  if you're a human.  computers might have
more trouble.  I've been known to use "killall postgres" (yes, I know,
I'm bad!!)

I only do it so that I can restart the postmaster.  Our webserver is
pretty much continually connected, and when it deadlocks, all the
clients queue up.  It would be nice to have a set of commands to show
you all connections, the machine/remote port they're from (for
identd), the username/dbname they're connected as, when they
connected, idle time, etc.  like "finger" for postgres.

I'm willing to work on it, if someone can point me in the right
direction.  (First things first though)

On Wed, 29 April 1998, at 23:20:52, The Hermit Hacker wrote:

> 
> 	Under FreeBSD, there is:
> 
> setproctitle(3) - set the process title for ps 1
> 
> 	This isn't available under Solaris though, last I checked...
> 
> Marc G. Fournier                                
> Systems Administrator @ hub.org 
> primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org 

Wed, 29 Apr 1998 19:36:31 -0700 (PDT)
Brett McCormick <brett@work.chicken.org>
Re: [HACKERS] removing the exec() from doexec()
> 
> On Wed, 29 Apr 1998, Bruce Momjian wrote:
> 
> > No reason for the exec().  I believe the only advantage is that it gives
> > us a separate process name in the 'ps' listing.  I have looked into
> > simulating this.
> 
> 	Under FreeBSD, there is:
> 
> setproctitle(3) - set the process title for ps 1
> 
> 	This isn't available under Solaris though, last I checked...

Not even BSDI, which is BSD 4.4 like FreeBSD.

-- 
Bruce Momjian                          |  830 Blythe Avenue
maillist@candle.pha.pa.us              |  Drexel Hill, Pennsylvania 19026
  +  If your life is a hard drive,     |  (610) 353-9879(w)
  +  Christ can be your backup.        |  (610) 853-3000(h)

Wed, 29 Apr 1998 22:42:39 -0400 (EDT)
Bruce Momjian <maillist@candle.pha.pa.us>
Re: [HACKERS] removing the exec() from doexec()
> 
> 
> sure enough..  well, try this on your OS and you can find out if perl
> knows how to change it.  it doesn't work under solaris.  the args to
> ps might be different for your system.
> 
> perl -e '$0 = "it_works!";system "ps -p $$"'
> 
> However, the args to the processes are so different that it seems easy
> to tell the difference..  if you're a human.  computers might have
> more trouble.  I've been known to use "killall postgres" (yes, I know,
> I'm bad!!)

The args don't change on a fork() either.  The only way is to look at
the parent of all the postgres children.


-- 
Bruce Momjian                          |  830 Blythe Avenue
maillist@candle.pha.pa.us              |  Drexel Hill, Pennsylvania 19026
  +  If your life is a hard drive,     |  (610) 353-9879(w)
  +  Christ can be your backup.        |  (610) 853-3000(h)

Wed, 29 Apr 1998 22:51:43 -0400 (EDT)
Bruce Momjian <maillist@candle.pha.pa.us>
Re: [HACKERS] removing the exec() from doexec()
> > On Wed, 29 Apr 1998, Bruce Momjian wrote:
> > 
> > > No reason for the exec().  I believe the only advantage is that it gives
> > > us a separate process name in the 'ps' listing.  I have looked into
> > > simulating this.
> > 
> > 	Under FreeBSD, there is:
> > 
> > setproctitle(3) - set the process title for ps 1
> > 
> > 	This isn't available under Solaris though, last I checked...
> 
> Not even BSDI, which is BSD 4.4 like FreeBSD.

ubik:~$ uname -a
Linux ubik 2.0.32 #1 Wed Nov 19 00:46:45 EST 1997 i586 unknown
ubik:~$ perl -e '$0 = "it_works!";system "ps p $$"'
  PID TTY STAT  TIME COMMAND
 7629  p8 S    0:00 it_works!                                                  

-dg



Wed, 29 Apr 1998 23:24:39 -0700 (PDT)
dg@illustra.com (David Gould)
Re: [HACKERS] removing the exec() from doexec()
> 
> > > On Wed, 29 Apr 1998, Bruce Momjian wrote:
> > > 
> > > > No reason for the exec().  I believe the only advantage is that it gives
> > > > us a separate process name in the 'ps' listing.  I have looked into
> > > > simulating this.
> > > 
> > > 	Under FreeBSD, there is:
> > > 
> > > setproctitle(3) - set the process title for ps 1
> > > 
> > > 	This isn't available under Solaris though, last I checked...
> > 
> > Not even BSDI, which is BSD 4.4 like FreeBSD.
> 
> ubik:~$ uname -a
> Linux ubik 2.0.32 #1 Wed Nov 19 00:46:45 EST 1997 i586 unknown
> ubik:~$ perl -e '$0 = "it_works!";system "ps p $$"'
>   PID TTY STAT  TIME COMMAND
>  7629  p8 S    0:00 it_works!                                                  

Let me clarify.  BSDI does not have setproctitle, but the perl test does
works, sort of:

$ perl -e '$0 = "it_works!";system "ps -p $$"'
  PID  TT  STAT      TIME COMMAND
13095  pc  S+     0:00.02 it_works! rks! ! (perl)


-- 
Bruce Momjian                          |  830 Blythe Avenue
maillist@candle.pha.pa.us              |  Drexel Hill, Pennsylvania 19026
  +  If your life is a hard drive,     |  (610) 353-9879(w)
  +  Christ can be your backup.        |  (610) 853-3000(h)

Thu, 30 Apr 1998 10:18:44 -0400 (EDT)
Bruce Momjian <maillist@candle.pha.pa.us>
Re: [HACKERS] removing the exec() from doexec()
The Hermit Hacker <scrappy@hub.org> writes:
> On Wed, 29 Apr 1998, Bruce Momjian wrote:
>> No reason for the exec().  I believe the only advantage is that it gives
>> us a separate process name in the 'ps' listing.  I have looked into
>> simulating this.
> 	Under FreeBSD, there is:
> setproctitle(3) - set the process title for ps 1
> 	This isn't available under Solaris though, last I checked...

Setting the process title from C is messy, but there is a readily
available reference.  The Berkeley sendmail distribution includes code
to emulate setproctitle on practically every platform.  See conf.h and
conf.c in any recent sendmail release.  Warning: it's grotty enough to
make a strong man weep.  Don't read near mealtime ;-)

			regards, tom lane

Thu, 30 Apr 1998 10:52:47 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: [HACKERS] removing the exec() from doexec() 
Bruce Momjian <maillist@candle.pha.pa.us> writes:
> This exec() takes 15% of our startup time.  I have wanted it removed for
> many releases now.

Don't forget that you will have to use a real fork() rather than
vfork().  Some of the apparent savings will not materialize.

I agree, though, that using exec() to reinvoke the same binary is
pretty silly, especially when you don't want exec's normal side-effects
of detaching shared mem etc.  And being able to rip out the dependency
on whether vfork() exists would be nice.

			regards, tom lane

Thu, 30 Apr 1998 10:59:50 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: [HACKERS] removing the exec() from doexec() 
> Setting the process title from C is messy, but there is a readily
> available reference.  The Berkeley sendmail distribution includes code
> to emulate setproctitle on practically every platform.  See conf.h and
> conf.c in any recent sendmail release.  Warning: it's grotty enough to
> make a strong man weep.  Don't read near mealtime ;-)

Yep, I have seen it.  Good advice.  What does grotty mean?

-- 
Bruce Momjian                          |  830 Blythe Avenue
maillist@candle.pha.pa.us              |  Drexel Hill, Pennsylvania 19026
  +  If your life is a hard drive,     |  (610) 353-9879(w)
  +  Christ can be your backup.        |  (610) 853-3000(h)

Thu, 30 Apr 1998 11:16:58 -0400 (EDT)
Bruce Momjian <maillist@candle.pha.pa.us>
Re: [HACKERS] removing the exec() from doexec()
Bruce Momjian <maillist@candle.pha.pa.us> writes:
> What does grotty mean?

Hmm, I thought for sure that would be in the Hackers' Dictionary,
but not so.  Anyway, it means ugly, messy, contorted, bletcherous,
random.

After you read sendmail's setproctitle code, you'll understand ;-)

			regards, tom lane

Thu, 30 Apr 1998 11:40:08 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: [HACKERS] removing the exec() from doexec() 