Project

General

Profile

Bug #585

Updated by tuxillo almost 10 years ago

Good time of day. 

 

 As defined in sys/proc.h process may have one of this states: 

 

 enum procstat { 
         
         SIDL = 1, 
         
         SACTIVE = 2, 
         
         SSTOP = 3, 
         
         SZOMB = 4, 
 
 }; 

 

 For display summary process info 'top' use procstatenames array with values: 
 
 "", " starting, ", " running, ", " sleeping, ", " stopped, ", " zombie, " 
 
 which are not mapped to process's states. 

 

 There is a patch fo fix this promblem. It also display processes with 
 
 sleeping lwp as sleeping, for example: 

 

 37 processes:    1 running, 36 sleeping 

 

 But is more better mark process as sleeping only if _all_ of this lwps 
 
 are in sleeping state. 

 

 --- /usr/src/usr.bin/top/machine.c.orig 2007-03-22 17:03:23.000000000 +0300 
 
 +++ /usr/src/usr.bin/top/machine.c        2007-03-22 18:16:48.000000000 +0300 
 
 @@ -138,8 +138,8 @@ 

  

  int process_states[6]; 
  
  char *procstatenames[] = { 
 
 -      "", " starting, ", " running, ", " sleeping, ", " stopped, ", 
 
 -      " zombie, ", 
 
 +      "", " starting, ", " running, ", " stopped, ", " zombie, ", 
 
 +      " sleeping, ", 
      
      NULL 
  
  }; 

 

 @@ -501,6 +501,8 @@ 
             
             (show_system || ((PP(pp, flags) & P_SYSTEM) == 0))))) 
         
         { 
             
             total_procs++; 
 
 +             if (LP(pp, stat) == LSSLEEP) 
 
 +                 PP(pp, stat) = SZOMB + 1; 
             
             process_states[(unsigned char) PP(pp, stat)]++; 
             
             if ((show_threads && (LP(pp, pid) == 0)) || 
                 
                 (!show_only_threads && PP(pp, stat) != SZOMB &&

Back