2009-10-06 10 views
17

Ho provato google, ma ho trovato getppid() che ottiene il padre pid del processo corrente corrente.linux: si ottiene automaticamente il padre pid di un altro processo?

Ho bisogno di qualcosa come getppid(some_other_pid), c'è una cosa del genere? Praticamente prende il pid di qualche processo e restituisce il processo genitore 'pid.

+1

Dai un'occhiata alla chiamata di sistema sysctl() e questo link. http://www.objectpark.net/parentpid.html – vpram86

+1

@Aviatore, perché commentare e non una risposta? – hasen

risposta

22

Penso che la cosa più semplice sarebbe aprire "/ proc" e analizzare il contenuto.

troverete il PPID come il 4 ° parametro di/proc/pid/stat

+0

bene, quale parte di '/ proc/ /' contiene il padre pid? – hasen

+5

Il parametro 4 en/proc/pid/stat –

+0

Aha, fantastico! Puoi modificare la risposta per aggiungerla? – hasen

2

Si può avere uno sguardo al sysctl() chiamata di sistema e this collegamento.

+0

Provandolo "a ciocche piegate", non è sicuro del motivo per cui non è abbastanza compilante. è solo per OS X? Dovrebbe funzionare su linux? – hasen

+0

Funzionerà solo per BSD e OS X .. – vpram86

+0

si dovrebbe creare un collegamento ipertestuale più amichevole. https://www.w3.org/QA/Tips/noClickHere – Jeff

10

o da una shell Unix si può provare ps -p <child_pid> -o ppid=

+0

Impressionante risposta semplice. Per un comando puoi copiare/incollare per vederlo in azione provare ** 'ps -p $$ -o ppid =' **. $$ è l'ID processo corrente. – Jess

0

un altro modo per ottenere da ingresso proc:

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

I am 7 anni in ritardo alla festa, ma per tutti coloro che possono imbattervi in ​​questo domanda, ecco una soluzione alternativa su OS X. Altre risposte pubblicate qui sono corrette e sysctl() farà il lavoro, ma è anche possibile utilizzare proc_pidinfo per ottenere molte informazioni utili su un processo.

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

Ovviamente, è necessario un ulteriore controllo degli errori.

Problemi correlati