[comp.sys.encore] inq_stats/real uid

tperala@UB.D.UMN.EDU (Tim Perala) (12/02/88)

I am using the "inq_stats" call to find information on 
all processes that:

1) belong to a particular user, whether or not the process is
   running under a different uid or not.

2) have a common controlling terminal.

In short, I am having trouble finding the real uid of a process.

Here is the structure returned from a call to inq_stats when PROC_DETAIL
is the type of info requested....  (I hope this is not an infringement
of any type of copyright)

struct  proc_detail     {
	char    pd_state;       /* State.                                   */
	char    pd_pri;         /* Priority, negative is high.              */
	char    pd_initpri;     /* Priority at process creation.            */
	char    pd_basepri;     /* Current base priority (initpri + "nice").*/
	char    pd_curpri;      /* Current priority (basepri + scheduling   */
				/*      factors.                            */
	char    pd_intr;        /* If TRUE waiting at interruptable level.  */
	char    pd_classid;     /* Processor class bound to.                */
	char    pd_cpuid;       /* Processor currently executing on.        */
	char    *pd_sem;        /* Semaphore process is waiting for.        */
struct  timeval pd_utime;       /* Time spent in user mode.                 */
struct  timeval pd_stime;       /* Time spent in system mode.               */
struct  timeval pd_starttime;   /* Process creation time.                   */
	double  pd_virttime;    /* Process virtual time.                    */
	int     pd_tsize;       /* Size of text (clicks).                   */
	int     pd_dsize;       /* Size of data space (clicks).             */
	int     pd_ssize;       /* Copy of stack size (clicks).             */
	int     pd_rssize;      /* Current resident set size in clicks.     */
	int     pd_maxrss;      /* Copy of u.u_limit[MAXRSS].               */
	int     pd_swrss;       /* Resident set size before last swap.      */
	char    pd_nice;        /* Nice for cpu usage.                      */
        int     pd_maxrss;      /* Copy of u.u_limit[MAXRSS].               */
	int     pd_swrss;       /* Resident set size before last swap.      */
	char    pd_nice;        /* Nice for cpu usage.                      */
	short   pd_uid;         /* User id, used to direct tty signals.     */
	u_int   pd_pgrp;        /* Name of process group leader.            */
	int     pd_pid;         /* Unique process id.                       */
	int     pd_ppid;        /* Process id of parent.                    */
	char    pd_device[12];  /* Control terminal descriptor.             */
	int     pd_size;        /* Size of memory.                          */
	int     pd_flag;        /* Flags.                                   */
	char    pd_command[12]; /* The process command.                     */
	int     pd_sig;         /* The current signal.                      */
	int     pd_sighold;     /* The current mask of held signals.        */
	int     pd_sigignore;   /* The current mask of ignored signals.     */
	int     pd_sigcatch;    /* The current mask of caught signals.      */
};    

pd_uid is the effective uid (as far as I can tell).  How do I find the
real uid?

Any Encore people listening?  The documentation on this call 
leaves a lot to the imagination so to speak.

Thanks for any help.

Tim Perala
System Software Programmer
Information Services, University of MN, Duluth