2009-10-06 12 views
17

Próbowałem google, ale znalazłem getppid(), który pobiera macierzysty pid z procesu obecnego.linux: programowo uzyskasz pid rodzicielski innego procesu?

Potrzebuję czegoś takiego jak getppid(some_other_pid), czy jest coś takiego? Zasadniczo pobiera pid niektórych procesów i zwraca pid proces nadrzędny.

+1

Zajrzyj do wywołania systemowego sysctl() i tego linku. http://www.objectpark.net/parentpid.html – vpram86

+1

@Aviator, dlaczego komentarz, a nie odpowiedź? – hasen

Odpowiedz

22

Myślę, że najprostszą rzeczą byłoby otwarcie "/ proc" i przeanalizowanie zawartości.

Musisz znaleźć PPID jako 4th parametr/proc/pid/stat

+0

cóż, jaka część '/ proc/ /' przechowuje macierzystą pid? – hasen

+5

4 parametr en/proc/pid/stat –

+0

Aha, niesamowite! Czy możesz edytować odpowiedź, aby to dodać? – hasen

2

Można spojrzeć na sysctl() wywołania systemowego i this link.

+0

Próbuję go "niewidocznie", nie wiem, dlaczego nie jest to kompilacja. czy to tylko dla OS X? Czy ma działać na Linuksie? – hasen

+0

Będzie działać tylko dla BSD i OS X .. – vpram86

+0

powinieneś stworzyć bardziej przyjazny link. https://www.w3.org/QA/Tips/noClickHere – Jeff

10

lub Unix shell można spróbować ps -p <child_pid> -o ppid=

+0

Niesamowita prosta odpowiedź. Aby wykonać polecenie, możesz skopiować/wkleić, aby zobaczyć je w akcji, spróbuj ** 'ps -p $$ -o ppid =' **. $$ to bieżący identyfikator procesu. – Jess

0

jeszcze jeden sposób, aby uzyskać ją od wejścia proc:

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

Jestem 7 lat późno do partii, ale dla każdego, kto może natknąć się na ten pytanie, oto alternatywne rozwiązanie na OS X. Inne odpowiedzi zamieszczone tutaj są poprawne i sysctl() wykona zadanie, ale możesz również użyć proc_pidinfo, aby uzyskać wiele przydatnych informacji o procesie.

#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; 
} 

Oczywiście konieczne jest dodatkowe sprawdzenie błędów.

Powiązane problemy