2009-10-06 9 views
17

J'ai essayé google, mais j'ai trouvé getppid() qui obtient le pid parent du processus actuel.linux: obtenir par programme le pid parent d'un autre processus?

J'ai besoin de quelque chose comme getppid(some_other_pid), y at-il une telle chose? Fondamentalement, prend le pid de certains processus et renvoie le pid du processus parent.

+1

Jetez un oeil à l'appel système sysctl() et ce lien. http://www.objectpark.net/parentpid.html – vpram86

+1

@Aviator, pourquoi commenter et pas une réponse? – hasen

Répondre

22

Je pense que la chose la plus simple serait d'ouvrir "/ proc" et d'analyser le contenu.

Vous trouverez le ppid comme le 4ème paramètre de/proc/pid/stat

+0

bien, quelle partie de '/ proc/ /' contient le pid parent? – hasen

+5

Le paramètre 4 en/proc/pid/stat –

+0

Aha, génial! Pouvez-vous modifier la réponse pour l'ajouter? – hasen

2

Vous pouvez jeter un oeil à sysctl() appel système et lien this.

+0

Essayez-le "à l'aveugle", je ne sais pas pourquoi il ne compile pas tout à fait. est-ce seulement pour OS X? Est-ce censé fonctionner sur linux? – hasen

+0

Il ne fonctionnera que pour BSD et OS X .. – vpram86

+0

vous devez créer un lien hypertexte plus convivial. https://www.w3.org/QA/Tips/noClickHere – Jeff

10

ou d'un shell unix vous pouvez essayer ps -p <child_pid> -o ppid=

+0

Impressionante réponse simple. Pour une commande vous pouvez copier/coller pour la voir en action, essayez ** 'ps -p $$ -o ppid =' **. $$ est l'identifiant de processus actuel. – Jess

0

une autre façon de l'obtenir à partir de l'entrée de proc:

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

Je suis 7 ans de retard à la fête, mais pour tous ceux qui peuvent tomber par hasard sur ce question, voici une solution alternative sur OS X. Les autres réponses postées ici sont correctes et sysctl() fera l'affaire, mais vous pouvez également utiliser proc_pidinfo pour obtenir beaucoup d'informations utiles sur un processus.

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

De toute évidence, une vérification d'erreur supplémentaire est requise.

Questions connexes