跳到主要內容

Get ProcessId by Process Name on FreeBSD/Mac OS X

因為某原因,我必須在FreeBSD上寫個daemon去監控另一個process,也就是俗稱的Watch Dog,貪圖開發方便,就用OS X上的XCode當作開發工具。

原本在FreeBSD上有kvm_getprocs,但是OS X上並沒有(另外我不知道會不會造成只看得到user space process),所以我就改找sysctl
int getProcessIdByName(char *processname)
{
 struct kinfo_proc *procs = NULL, *newprocs;
 char  thiscmd   [MAXCOMLEN + 1];
 pid_t  thispid;
 int  mib        [4];
 size_t  miblen;
 int  i         , st, nprocs;
 size_t  size;

 int  processid = 0;
 size = 0;
 mib[0] = CTL_KERN;
 mib[1] = KERN_PROC;
 mib[2] = KERN_PROC_ALL;
 mib[3] = 0;
 miblen = 3;

 st = sysctl(mib, (u_int) miblen, NULL, &size, NULL, 0);
 do {
  size += size / 10;
  newprocs = realloc(procs, size);
  if (newprocs == 0) {
   if (procs)
    free(procs);
  }
  procs = newprocs;
  st = sysctl(mib, (u_int) miblen, procs, &size, NULL, 0);
 } while (st == -1 && errno == ENOMEM);

 nprocs = (int)size / sizeof(struct kinfo_proc);

 for (i = 0; i < nprocs; i++) {
  thispid = procs[i].ki_pid;
  strncpy(thiscmd, procs[i].ki_comm, MAXCOMLEN);
  thiscmd[MAXCOMLEN] = '\0';
  if (strcmp(thiscmd, processname) == 0) {
   processid = thispid;
  }
 }
 free(procs);
 return processid;
}

留言

這個網誌中的熱門文章

自然人憑證讀卡機驅動程式

鳥毅用的是第一代的自然人憑證讀卡機,EZ100PU(後來有同事買EZmini可以讀SIM卡似乎更好),每年報稅時用一次。

本來只是要申請些政府業務,一時之間找不到光碟,沒想到在驅動程式下載居然看到Linux和Mac的驅動程式,剩下的就是政府單位的網頁和程式應該改版了吧!!!

在Windows Server設定L2TP over IPSec VPN

簡單地說,macOS Sierra與iOS 10發表後,大家忽然發現Apple不再支援PPTP,所以一定得設定其他的VPN型態。若不要另外裝client,用L2TP是最方便的,SSL VPN雖然好,但若沒有安裝Agent要連線到任一電腦或是非網頁服務還是挺麻煩的。