Подтвердить что ты не робот

Программно получить родительский pid другого процесса?

Я попробовал google, но нашел getppid(), который получает родительский pid текущего процесса.

Мне нужно что-то вроде getppid(some_other_pid), есть ли такая вещь? В основном принимает pid какого-то процесса и возвращает родительский процесс pid.

4b9b3361

Ответ 1

Я думаю, что проще всего было бы открыть "/proc" и проанализировать содержимое.

Вы найдете ppid как 4-й параметр/proc/pid/stat

Ответ 2

или из оболочки unix вы можете попробовать ps -p <child_pid> -o ppid=

Ответ 3

Я опаздываю на вечеринку на 7 лет, но для тех, кто может наткнуться на этот вопрос, вот альтернативное решение для OS X. Другие ответы, размещенные здесь, верны, и sysctl() выполнит эту работу, но вы также можете использовать proc_pidinfo, чтобы получить много полезной информации о процессе.

#include <libproc.h>

int getppid(const pid_t pid)
{
    proc_bsdinfo info;
    proc_pidinfo(pid, PROC_PIDTBSDINFO, 0, &info, sizeof(info));
    return info.pbi_ppid;
}

Очевидно, требуется дополнительная проверка ошибок.

Ответ 4

Вы можете посмотреть системный вызов sysctl() и эту ссылку.

Ответ 5

еще один способ получить его от записи proc:

cat /proc/<pid>/status | grep PPid: