读取进程表 - AIX 4.2 版

     #include <stdio.h>
     #include <procinfo.h>
    
     int getprocs(struct procsinfo *, int, struct fdsinfo *,
                  int, pid_t *, int);
    
     pid_t getpidbyname(char *name, pid_t *nextPid)
     {
       struct procsinfo  pi;
       pid_t             retval = (pid_t) -1;
       pid_t             pid;
    
       pid = *nextPid;
    
       while(1)
       {
         if(getprocs(&pi, sizeof pi, 0, 0, &pid, 1) != 1)
           break;
    
         if(!strcmp(name, pi.pi_comm))
         {
           retval = pi.pi_pid;
           *nextPid = pid;
           break;
         }
       }
    
       return retval;
     }
    
     int main(int argc, char *argv[])
     {
       int   curArg;
       pid_t pid;
       pid_t nextPid;
    
       if(argc == 1)
       {
         printf("syntax: %s <program> [program ...]\n",argv[0]);
         exit(1);
       }
    
       for(curArg = 1; curArg < argc; curArg++)
       {
         printf("Process IDs for %s\n", argv[curArg]);
    
         for(nextPid = 0, pid = 0; pid != -1; )
           if((pid = getpidbyname(argv[curArg], &nextPid)) != -1)
             printf("\t%d\n", pid);
       }
     }