您的位置:首页 > 运维架构 > Linux

linux C 获取pid终极父进程的PID

2016-10-09 17:27 441 查看
int GetFatherPid(int pid)
{
char dir[1024]={0};
char path[1024] = {0};
char buf[1024] = {0};
int rpid = 0;
int fpid=0;
char fpth[1024]={0};
struct stat st;
ssize_t ret =0;

sprintf(dir,"/proc/%d/",pid);

sprintf(path,"%sstat",dir);

if(stat(path,&st)!=0)
{
return -2;
}

memset(buf,0,strlen(buf));

FILE * fp = fopen(path,"r");

ret += fread(buf + ret,1,300-ret,fp);

fclose(fp);

sscanf(buf,"%*d %*c%s %*c %d %*s",fpth,&fpid);

fpth[strlen(fpth)-1]='\0';

if(strcmp(fpth,"bash")!=0 && strcmp(fpth,"sudo")!=0 ) //bash 终端  sudo 终端
{
if(fpid==1)
{
return pid;
}
else if(fpid==2)
{
return -1; //内核线程
}

rpid = GetFatherPid(fpid);

if(rpid == 0)
{
rpid  = pid;
}
}

return rpid;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言