[comp.sys.apollo] more ignorant questions ...

krowitz%richter@UMIX.CC.UMICH.EDU (David Krowitz) (12/14/89)

I've noticed that a number of Apollo supplied programs
manage to their process names (the ones shown by /com/pst)
no matter what name you use when you start the program.
Anyone have any idea how this is accomplished?


 -- David Krowitz

krowitz@richter.mit.edu   (18.83.0.109)
krowitz%richter.mit.edu@eddie.mit.edu
krowitz%richter.mit.edu@mitvma.bitnet
(in order of decreasing preference)

lampi@pnet02.gryphon.com (Michael Lampi) (12/15/89)

The names of the processes are entered in `node_data/proc_dir. If you change
the names in this directory, you change the name displayed by /com/pst.

Michael Lampi               MDL Corporation   213/782-7888   fax 213/782-7927

UUCP: {ames!elroy, <routing site>}!gryphon!pnet02!lampi
INET: lampi@pnet02.gryphon.com
"My opinions are that of my corporation!"

holtz@cascade.carleton.CDN (Neal Holtz) (12/15/89)

To set the name of a process (in SR9.7), we use the following 
C procedure, which uses an undocumented system call.  The procedure
tries 25 (or is it 26) times to set the name, appending a numeric count
to the name when a process of the desired name already exists.
#####################################################################
/* 
 * set the name of this process 
 */
 
int Name_process( pn )
char	*pn;		/* the desired process name */
{
	std_$call	pm_$set_my_name();	/* undocumented, but handy */
	typedef	long	stat_$t;		/* status codes returned */
	stat_$t		st;
	stat_$t		exists = 0x800E0003;    /* if process already exists */
	int		cnt = 0;		/* to append to name */
	char		buf[100];

	strcpy( buf, pn );
	pm_$set_my_name( buf, (short)strlen(buf), st );
	while( st == exists && cnt < 25 ) {
    		sprintf( buf, "%s.%d", pn, cnt++ );
        	pm_$set_my_name( buf, (short)strlen(buf), st );
	}
	return( st == 0 );
}

dbfunk@icaen.uiowa.edu (David B Funk) (12/15/89)

WRT posting <8912131818.AA18099@richter.mit.edu>:
> I've noticed that a number of Apollo supplied programs
> manage to their process names (the ones shown by /com/pst)
> no matter what name you use when you start the program.
> Anyone have any idea how this is accomplished?

By this I assume that you're refering to something like:
1) You start a process with the DM "cps" or a "crp -cps"
   command such as: "Command: cps /sys/ncs/llbd -n my_name" (sr9.7)
2) You then do a "/com/pst" and see:

...
  34246.796   3/14/14   3B416592    Wait   tcp_server
     42.164   3/14/14   3B416072    Wait   netman
     32.812   3/13/14   3B416592    Wait   process_333
   1307.390   3/14/14   3B416592    Wait   ns_helper
     10.636   3/14/14   3B416592    Wait   llbd
      0.123   3/14/14   3B416592    Wait   message
...

  And you notice that "my_name" is gone and that "llbd" is
  now there.

Here's what is happening; The name that you gave to the process
during the process creation was OK, but the program was written
so that it did some stuff and then did a Unix "fork" to create
a new copy of itself. The parent process (the one that you started
and named) then exited and the new child process was un-named so
it was free to set its own name with the "set my name" system call.
    A program usually does the "fork" trick when it wants to do
things like change the standard streams around or detach itself
from the controlling "tty" or if it's a "set-uid" program.
    BTW don't try to go changing the names that you find in
`node_data/proc_dir. This can cause problems/confusion and under
sr10, you can see named processes with pst and find no entry
for them in `node_data/proc_dir.

Dave Funk