как программно получить идентификатор процесса из имени процесса в Linux

В моем проекте мы используем промежуточное ПО ACE (Adaptive Communication Environment) для написания независимого от ОС кода, который будет работать как в Windows, так и в Linux.

Требование состоит в том, чтобы получить идентификатор процесса из имени процесса. Поскольку ACE не поддерживает это, нам придется использовать макросы для конкретных платформ, чтобы разделить код для Windows и Linux.

Для окон мне пришлось бы использовать либо EnumProcesses, либо CreateToolhelp32Snapshot.

Как сделать то же самое в Linux с помощью API?

Язык программирования С++


person G.S    schedule 20.05.2015    source источник


Ответы (1)


если я правильно понял ваш вопрос, вы можете сделать это с С++

char buf[512];
FILE *cmd_pipe = popen("pidof -s process_name", "r");

fgets(buf, 512, cmd_pipe);
pid_t pid = strtoul(buf, NULL, 10);

pclose( cmd_pipe );  

вот еще один пример: Получить идентификатор процесса по имени в Linux с помощью C++

person fecub    schedule 20.05.2015
comment
Выглядит неплохо. Но и здесь мы используем команду pidof. Нет ли интерфейса API, похожего на Windows? - person G.S; 20.05.2015
comment
я не уверен, существует ли API. Повысьте библиотеку, возможно. В стандартной библиотеке существует функция, которая возвращает идентификатор процесса приложения. getpid() возвращает идентификатор процесса вызывающего процесса ИЛИ getppid() возвращает идентификатор процесса родителя вызывающего процесса. источник: linux.die.net/man/2/getpid - person fecub; 20.05.2015