home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume4 / sco-crash / user.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-02-03  |  2.9 KB  |  115 lines

  1. #include <sys/param.h>
  2. #include <sys/sysmacros.h>
  3. #include <sys/types.h>
  4. #include <sys/page.h>
  5. #include <sys/seg.h>
  6. #include <sys/file.h>
  7. #include <sys/proc.h>
  8. #include <sys/signal.h>
  9. #include <sys/dir.h>
  10. #include <sys/user.h>
  11. #include <sys/var.h>
  12. #include <sys/lock.h>
  13. #include "crash.h"
  14.  
  15. findu (proc, slot, user)
  16. struct    proc    *proc;
  17. int    slot;
  18. struct    user    *user;
  19. {
  20.     struct    proc    *procs = (struct proc *) namelist[NM_PROC].xl_value;
  21.     long    swapaddr;
  22.     int    i;
  23.  
  24.     if ((proc->p_flag & (SSWAP|SSPART)) || ! (proc->p_flag & SLOAD)) {
  25.         swapaddr = proc->p_addr[0].te_frameno * NBPC;
  26.         l_lseek (swapfd, swapaddr, 0);
  27.         r_read (swapfd, user, sizeof *user);
  28.     } else {
  29.         l_lseek (memfd, proc->p_addr[0].te_frameno * NBPC, 0);
  30.         r_read (memfd, user, sizeof *user);
  31.     }
  32.     if (user->u_procp - procs == slot)
  33.         return (1);
  34.     else
  35.         return (0);
  36. }
  37.  
  38. prusers (items, cnt)
  39. int    *items;
  40. int    cnt;
  41. {
  42.     int    i;
  43.  
  44.     if (cnt == 0) {
  45.         douser (-1);
  46.         return (1);
  47.     }
  48.     for (i = 0;i < cnt;i++) {
  49.         if (items[i] >= v.v_proc) {
  50.             printf ("value (%d) out of range\n", items[i]);
  51.             continue;
  52.         } else {
  53.             douser (items[i]);
  54.         }
  55.     }
  56. }
  57.  
  58. douser (i)
  59. {
  60.     struct    file    *fp;
  61.     struct    proc    proc;
  62.     struct    proc    *pp;
  63.     static    char    *segments[] = { "user", "system", "user i" };
  64.     int    fileno;
  65.  
  66.     pp = (struct proc *) namelist[NM_PROC].xl_value;
  67.     fp = (struct file *) namelist[NM_FILE].xl_value;
  68.  
  69.     if (i >= 0) {
  70.         l_lseek (kmemfd, (long) &pp[i], 0);
  71.         r_read (kmemfd, &proc, sizeof proc);
  72.  
  73.         if (! findu (&proc, i, &user))
  74.             return (0);
  75.     } else {
  76.         l_lseek (kmemfd, namelist[NM_USER].xl_value, 0);
  77.         r_read (kmemfd, &user, sizeof user);
  78.     }
  79.     printf ("PER PROCESS USER AREA:\n");
  80.     printf ("USER ID's:    uid: %d, gid: %d, real uid: %d, real gid: %d\n",
  81.         user.u_uid, user.u_gid, user.u_ruid, user.u_rgid);
  82.     printf ("PROCESS TIMES:    user: %d, sys: %d, child user: %d, child sys: %d\n",
  83.         user.u_utime, user.u_stime, user.u_cutime, user.u_cstime);
  84.     printf ("PROCESS MISC:    proc slot: %d, cntrl tty: maj(%d) min(%d)\n",
  85.         user.u_procp - pp, major (user.u_ttyd), minor (user.u_ttyd));
  86.     printf ("IPC:        locks:%s%s%s%s%s\n",
  87.         user.u_lock == UNLOCK ? " unlocked":"",
  88.         user.u_lock & PROCLOCK ? " proc":"",
  89.         user.u_lock & TXTLOCK ? " text":"",
  90.         user.u_lock & DATLOCK ? " data":"",
  91.         user.u_lock & HUGELOCK ? " huge":"");
  92.     printf ("FILE I/O:    user addr: %ld, file offset: %ld, bytes: %ld,\n",
  93.         user.u_baseu, user.u_offset, user.u_count);
  94.     printf ("        segment: %s, umask: %01o, ulimit: %ld\n",
  95.         segments[user.u_segflg], user.u_cmask, user.u_limit);
  96.     printf ("ACCOUNTING:    command: %s, memory: %ld, type: %s\n",
  97.         user.u_comm, user.u_mem, user.u_acflag ? "fork":"exec");
  98.     printf ("        start: %s",
  99.         ctime (&user.u_start));
  100.  
  101.     printf ("OPEN FILES:    file desc:  ");
  102.     for (i = 0;i < NOFILE;i++)
  103.         if (user.u_ofile[i] != (struct file *) 0)
  104.             printf ("%4d", i);
  105.     putchar ('\n');
  106.     
  107.     printf ("        file slot:  ");
  108.     for (i = 0;i < NOFILE;i++)
  109.         if (user.u_ofile[i] != (struct file *) 0)
  110.             printf ("%4d", user.u_ofile[i] - fp);
  111.     putchar ('\n');
  112.  
  113.     return (0);
  114. }
  115.