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

  1. #include <sys/param.h>
  2. #include <sys/sysmacros.h>
  3. #include <sys/types.h>
  4. #include <sys/var.h>
  5. #include <sys/text.h>
  6. #include <sys/page.h>
  7. #include <sys/seg.h>
  8. #include <sys/proc.h>
  9. #include <sys/signal.h>
  10. #include <sys/dir.h>
  11. #include <sys/user.h>
  12. #include "crash.h"
  13.  
  14. /*
  15.  * prprocs - output the process table
  16.  */
  17.  
  18. prprocs (items, cnt)
  19. int    *items;
  20. int    cnt;
  21. {
  22.     struct    proc    *pp;
  23.     struct    user    user;
  24.     int    i;
  25.  
  26.     procs = (struct proc *) malloc (v.v_proc * sizeof (struct proc));
  27.     lseek (kmemfd, namelist[NM_PROC].xl_value, 0);
  28.     read (kmemfd, procs, sizeof (struct proc) * v.v_proc);
  29.  
  30.     printf ("SLT ST  PID  PPID  PGRP   UID  EUID PRI CPU    EVENT NAME       FLAGS\n");
  31.  
  32.     if (cnt == 0) {
  33.         for (i = 0;i < v.v_proc;i++) {
  34.             if (procs[i].p_stat == 0)
  35.                 continue;
  36.  
  37.             doproc (i);
  38.         }
  39.     } else {
  40.         for (i = 0;i < cnt;i++) {
  41.             if (items[i] >= v.v_proc)
  42.                 printf ("value (%d) out of range\n", items[i]);
  43.             else
  44.                 doproc (items[i]);
  45.         }
  46.     }
  47.     free ((char *) procs);
  48. }
  49.  
  50. doproc (i)
  51. int    i;
  52. {
  53.     struct    proc    *pp;
  54.  
  55.     pp = &procs[i];
  56.  
  57.     printf ("%3d %c %5d %5d %5d %5d %5d %3d %3d", i,
  58.         " swriztBST"[pp->p_stat], pp->p_pid, pp->p_ppid,
  59.         pp->p_pgrp, pp->p_uid, pp->p_suid,
  60.         pp->p_pri & 0377, pp->p_cpu & 0377);
  61.  
  62.     if (pp->p_wchan)
  63.         printf (" %8x", pp->p_wchan);
  64.     else
  65.         printf ("         ");
  66.  
  67.     if (pp->p_stat == SZOMB) {
  68.         printf (" ZOMBIE    ");
  69.     } else if (pp->p_flag & SSYS) {
  70.         printf (" swapper   ");
  71.     } else if (pp->p_stat != 0) {
  72.         if (findu (pp, i, &user))
  73.             printf (" %-10.10s", user.u_comm);
  74.         else
  75.             printf (" SWAPPED   ");
  76.     } else {
  77.         printf ("           ");
  78.     }
  79.     if (pp->p_stat == SRUN)        printf (" running");
  80.     if (pp->p_stat == SZOMB)    printf (" zombie");
  81.     if (pp->p_flag & SLOAD)        printf (" incore");
  82.     else                printf (" swapped");
  83.     if (pp->p_flag & SSYS)        printf (" sched");
  84.     if (pp->p_flag & SLOCK)        printf (" locked");
  85.     if (pp->p_flag & STRC)        printf (" traced");
  86.     if (pp->p_flag & SWTED)        printf (" wanted");
  87.     if (pp->p_flag & STEXT)        printf (" text");
  88.     if (pp->p_flag & SSPART)    printf (" part-swap");
  89.  
  90.     printf ("\n");
  91. }
  92.