pstree.cpp 699 B

1234567891011121314151617181920212223242526272829303132333435
  1. // DT PS Tree
  2. //
  3. // Douglas Thrift
  4. //
  5. // $Id$
  6. #include <err.h>
  7. #include <fcntl.h>
  8. #include <kvm.h>
  9. #include <limits.h>
  10. #include <paths.h>
  11. #include <stdio.h>
  12. #include <sys/param.h>
  13. #include <sys/sysctl.h>
  14. #include <sys/user.h>
  15. int main(int argc, char *argv[])
  16. {
  17. char error[_POSIX2_LINE_MAX];
  18. kvm_t *kd = kvm_openfiles(NULL, _PATH_DEVNULL, NULL, O_RDONLY, error);
  19. if (!kd)
  20. errx(1, "%s", error);
  21. int count;
  22. struct kinfo_proc *procs = kvm_getprocs(kd, KERN_PROC_PROC, 0, &count);
  23. if (!procs)
  24. errx(1, "%s", kvm_geterr(kd));
  25. for (struct kinfo_proc *proc = procs, *end = procs + count; proc != end; ++proc)
  26. printf("%s %i %i\n", proc->ki_comm, proc->ki_pid, proc->ki_ppid);
  27. return 0;
  28. }