/* * Set up the agent if running as a daemon. */ int main(int argc, char **argv) { int c, err = 0; int sep = __pmPathSeparator(); pmdaInterface dispatch; char mypath[MAXPATHLEN]; isDSO = 0; __pmSetProgname(argv[0]); __pmGetUsername(&username); snprintf(mypath, sizeof(mypath), "%s%c" "openbsd" "%c" "help", pmGetConfig("PCP_PMDAS_DIR"), sep, sep); pmdaDaemon(&dispatch, PMDA_INTERFACE_5, pmProgname, OPENBSD, "openbsd.log", mypath); while ((c = pmdaGetOpt(argc, argv, "D:d:i:l:pu:U:6:?", &dispatch, &err)) != EOF) { switch(c) { case 'U': username = optarg; break; default: err++; } } if (err) usage(); pmdaOpenLog(&dispatch); openbsd_init(&dispatch); pmdaConnect(&dispatch); pmdaMain(&dispatch); exit(0); }
struct and_procent *openbsd_getfirst () { char errmsg [_POSIX2_LINE_MAX]; if (!openbsd_kvm) { openbsd_kvm = kvm_openfiles(NULL,NULL,NULL,O_RDONLY,errmsg); if (!openbsd_kvm) { and_printf(0,"KVM: cannot open (\"%s\"). Aborting.\n",errmsg); abort(); } openbsd_init(); } openbsd_pt = kvm_getprocs(openbsd_kvm,KERN_PROC_ALL,0,&openbsd_nproc); if (!openbsd_pt) { and_printf(0,"KVM: cannot retrieve process table. Aborting.\n"); abort(); } openbsd_next = 0; return openbsd_getnext(); }