当前位置: 技术问答>linux和unix
C调用SHELL怎么获取这个SHELL的pid?
来源: 互联网 发布时间:2017-04-17
本文导语: 我先用fork创建了一个子进程,然后在子进程中调用一个shell(调用方法不限制)。这个shell跑起来后,这个shell的pid怎么在程序获得。我以前是子进程的pid就是这个pid了。结果发现不是。 #include #include #include #includ...
我先用fork创建了一个子进程,然后在子进程中调用一个shell(调用方法不限制)。这个shell跑起来后,这个shell的pid怎么在程序获得。我以前是子进程的pid就是这个pid了。结果发现不是。
这样就可以得到 子子进程的pid,不过要等他跪了以后,另外buf大一点
另外的办法就是就是再开个管道,用ps 啥命令的把进程子子进程id找到,或者类似的
好像没有直接获取子进程的调用
#include
#include
#include
#include
void child()
{
FILE *pf = NULL;
int size = 0;
char buf[100] =
{ 0 };
pf = popen("DEBUG=1 pppoe-start", "r");
size = fread(buf, 1, 512, pf);
printf("buf = %sn", buf);
return 0;
}
int main()
{
pid_t child_pid;
int status;
char prog[] = "DEBUG=1 pppoe-start";
printf("** Execuing program: ls -l /bin/gzip **nn");
child_pid = fork();
if (child_pid 0)
{
printf("pid is %dn",nPid);
}
else
break;
}
}
void child()
{
FILE *pf = NULL;
int size = 0;
char buf[512 + 1] = { 0 };
signal(SIGCLD, Wait);
pf = popen("DEBUG=1 pppoe-start", "r");
size = fread(buf, 1, 512, pf);
printf("buf = %sn", buf);
return 0;
}
这样就可以得到 子子进程的pid,不过要等他跪了以后,另外buf大一点
另外的办法就是就是再开个管道,用ps 啥命令的把进程子子进程id找到,或者类似的
好像没有直接获取子进程的调用
|
1. 可以通过getpid获取当前进程的id
2. fork子进程后,execve启动的程序的id就是子进程的id
2. fork子进程后,execve启动的程序的id就是子进程的id
|
fork在父进程中的返回值就是子进程的pid,需要用到就直接保存就行了。