+#elif defined(OS_FreeBSD)
+static enum status_code
+do_procinit(void)
+{
+ struct kinfo_proc *kp;
+ int rc, mib[3];
+ size_t len = 0;
+ int nentries, i;
+ enum status_code prog_status = STATUS_DEAD;
+
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PROC;
+ mib[2] = KERN_PROC_PROC;
+
+ rc = sysctl(mib, 3, NULL, &len, NULL, 0);
+ if (rc != 0 && errno != ESRCH)
+ return STATUS_UNKNOWN;
+ if (len == 0)
+ return STATUS_UNKNOWN;
+
+ kp = xmalloc(len);
+ rc = sysctl(mib, 3, kp, &len, NULL, 0);
+ if (rc != 0 && errno != ESRCH)
+ return STATUS_UNKNOWN;
+ if (len == 0)
+ return STATUS_UNKNOWN;
+ nentries = len / sizeof(*kp);
+
+ for (i = 0; i < nentries; i++) {
+ enum status_code pid_status;
+
+ pid_status = pid_check(kp[i].ki_pid);
+ if (pid_status < prog_status)
+ prog_status = pid_status;
+ }
+
+ free(kp);
+
+ return prog_status;
+}