2013-10-01 2 views
0

Есть ли способ получить родительский элемент родителя моего pid? Существует getpid() и getppid(), я ищу для «getpppid()»Получите родительский элемент родителя моего pid (aka getpppid())

PS: Я на Linux, и код будет работать только на Linux (не Unix, ни каких-либо других вариантов)

+2

У меня была одна и та же проблема некоторое время назад - я не думаю, что есть функция, которая дает значение, но вы можете перемещаться по '/ proc//status' и читать там ppids. Однако, если вы разыгрываете себя, вы можете просто сохранить свой собственный пид достаточно рано. –

+1

помните, что читать намного проще «/ proc//stat' - см. [' Proc (5) '] (http://man7.org/linux/man-pages/man5/proc.5.html) для деталей того, что читает каждый столбец, и как его «сканировать». – Petesh

ответ

2

Здесь находятся.

pid_t getpppid(void) 
{ 
    char exe[256],proc[81],state; 
    FILE *fp; 
    int pid,ppid=-1; 

    snprintf(proc,81,"/proc/%d/stat",(int)getppid()); 
    fp=fopen(proc,"r"); 
    if(fp) 
    { 
     fscanf(fp,"%d %s %c %d",&pid,exe,&state,&ppid); 
     fclose(fp); 
    } 
    return (pid_t)ppid; 
} 

EDIT: Просто вспомните, что если ваш родитель или ваш процесс называется УИП() с начала, ваша программа не может иметь права на чтение этого процесса стат.

+0

Я просто смотрел на этот точный код, найденный в linuxforums :) – alexandernst

Смежные вопросы