I need to find the PID of a certain program on Mac OSX using C++ and save it as an variable. I have been looking for the answer for this question for a while, and I can't find a detailed one, or one that works. If anyone has an idea on how to do this, please reply. Thanks!
1 Answer
You can use proc_listpids in conjunction with proc_pidinfo:
#include <libproc.h> #include <stdio.h> #include <string.h> void find_pids(const char *name) { pid_t pids[2048]; int bytes = proc_listpids(PROC_ALL_PIDS, 0, pids, sizeof(pids)); int n_proc = bytes / sizeof(pids[0]); for (int i = 0; i < n_proc; i++) { struct proc_bsdinfo proc; int st = proc_pidinfo(pids[i], PROC_PIDTBSDINFO, 0, &proc, PROC_PIDTBSDINFO_SIZE); if (st == PROC_PIDTBSDINFO_SIZE) { if (strcmp(name, proc.pbi_name) == 0) { /* Process PID */ printf("%d [%s] [%s]\n", pids[i], proc.pbi_comm, proc.pbi_name); } } } } int main() { find_pids("bash"); return 0; } 1 Comment
Matthew Barclay
This code can also be easily modified to return a boolean if the program is running. I used this code to check whether a program was running or not.
ps -aefin the Terminal. Then chose one process and try finding that, e.g.pgrep coreaudiodorpgrep USBAgent. Then maybe think about usingpopen()to do the same from your program in C++. stackoverflow.com/q/44610978/2836621processidof process"fred", you runpgrep fredin the Terminal and it prints theprocessid, surely? In your C++ program, you do exactly the same, then read that number usingpopen("/usr/bin/pgrep fred").