пятница, 20 июня 2008 г.

полезности

Долго рылся в хэлпах и исходниках в поисках возможности получить список процессов под freeBSD. В итоге нашёл два варианта первый модифицированный c forum.opennet.ru и один вытащил из исходника найденного на koders.com.

И не много подогнав под себя,

привожу код:
#include < stdio.h >
#include < string.h >
#include < err.h >
#include < kvm.h >
#include < sys/param.h >
#include < sys/sysctl.h >
#include < sys/user.h >
#include < sys/param.h >
#include < fcntl.h >
#include < stdlib.h >
#include < sysexits.h >

//##################################################################
static int get_pid_of_process(char *process_name, pid_t *pid_lst) {

  static kvm_t *kd = NULL;
  struct kinfo_proc *p;
  int i, n_processes, processes_found;

  processes_found = 0;

  if ((kd = kvm_open("/dev/null", "/dev/null", 
                     "/dev/null", O_RDONLY, "kvm_open")) == NULL) {

    (void)errx(1, "%s", kvm_geterr(kd));

  } else {

    p = kvm_getprocs(kd, KERN_PROC_PROC, 0, &n_processes);

    for (i = 0; i < n_processes; i++) {

      if ((strncmp(process_name, p[i].ki_comm, COMMLEN+1) == 0) 
                       && (getpid() != (int)p[i].ki_pid)) {

        if (pid_lst) {

          pid_lst[processes_found] = (int)p[i].ki_pid;
        }

        processes_found++;
      }
    }

    kvm_close(kd);
  }

  return processes_found;
}