svnweb.freebsd.org/base/release/10.2.0/bin/pkill/
Tracker, is a filesystem indexer, metadata storage system and search tool.
fossies.org/linux/tracker/src/tracker/tracker-process.c
How can a process inquire, when it was started?
github.com/dnabre/misc/tree/master/proc_info, Get time process started
github.com/hishamhm/htop/blob/master/freebsd/FreeBSDProcessList.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <signal.h> /* _POSIX2_LINE_MAX */ #include <limits.h> /* kvm_openfiles(), kvm_getprocs() */ #include <kvm.h> /* errx() */ #include <err.h> /* _PATH_DEVNULL */ #include <paths.h> /* O_RDONLY */ #include <fcntl.h> /* KERN_PROC_PROC */ #include <sys/sysctl.h> /* struct kinfo_proc */ #include <sys/user.h> #define STATUS_MATCH 0 #define STATUS_NOMATCH 1 #define STATUS_BADUSAGE 2 #define STATUS_ERROR 3 int main(int argc, char **argv) { int i; /* PID */ pid_t mypid; pid_t pid; /* KVM openfiles() */ kvm_t *kd; const char *execf; const char *coref; char buf[_POSIX2_LINE_MAX]; /* KVM getprocs() */ int nproc; struct kinfo_proc *plist; struct kinfo_proc *kp; /* KVM getargv() */ char **strv; char *selected; execf = NULL; coref = _PATH_DEVNULL; mypid = getpid(); /* * Retrieve the list of running processes from the kernel. */ kd = kvm_openfiles(execf, coref, NULL, O_RDONLY, buf); if (kd == NULL) errx(STATUS_ERROR, "Cannot open kernel files (%s)", buf); /* * Use KERN_PROC_PROC instead of KERN_PROC_ALL, since we * just want processes and not individual kernel threads. */ plist = kvm_getprocs(kd, KERN_PROC_PROC, 0, &nproc); if (plist == NULL) { errx(STATUS_ERROR, "Cannot get process list (%s)", kvm_geterr(kd)); } printf("nproc=%d\n", nproc); /* * Allocate memory which will be used to keep track of the * selection. */ if ((selected = malloc(nproc)) == NULL) { err(STATUS_ERROR, "Cannot allocate memory for %d processes", nproc); } memset(selected, 0, nproc); /* * Take the appropriate action for each matched process, if any. */ for (i = 0, kp = plist; i < nproc; i++, kp++) { printf("comm=%s tdname=%s wmesg=%s login=%s lockname=%s emul=%s loginclass=%s", kp->ki_comm, kp->ki_tdname, kp->ki_wmesg, kp->ki_login, kp->ki_lockname, kp->ki_emul, kp->ki_loginclass); if ((strv = kvm_getargv(kd, kp, 0)) != NULL) { printf(" argv=%s", strv[0]); } printf("\n"); } return 0; }