Мне нужно найти PID определенной программы в Mac OSX с помощью С++ и сохранить его как переменную. Я искал ответ на этот вопрос некоторое время, и я не могу найти подробный или тот, который работает. Если у кого-то есть идеи, как это сделать, пожалуйста, ответьте. Спасибо!
Как найти PID любого процесса в Mac OSX C++
Ответы (1)
Вы можете использовать proc_listpids
вместе с 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;
}
person
el.pescado
schedule
27.03.2018
Этот код также можно легко изменить, чтобы он возвращал логическое значение, если программа запущена. Я использовал этот код, чтобы проверить, запущена ли программа или нет.
- person Matthew Barclay; 02.09.2019
ps -aef
в Терминале. Затем выберите один процесс и попробуйте найти его, например.pgrep coreaudiod
илиpgrep USBAgent
. Тогда, возможно, подумайте об использованииpopen()
, чтобы сделать то же самое из вашей программы на C++. stackoverflow.com/q/44610978/2836621 - person Mark Setchell   schedule 27.03.2018processid
процесса"fred"
, вы запускаетеpgrep fred
в Терминале, и он печатаетprocessid
, верно? В вашей программе на C++ вы делаете то же самое, а затем читаете это число, используяpopen("/usr/bin/pgrep fred")
. - person Mark Setchell   schedule 27.03.2018