日期:2014-05-16  浏览次数:20955 次

父进程获取子进程pid的问题(linux c程序)
if(fork()==0)
{
....
if(fork()==0)
{}
}
else
{
//父进程获取子进程的pid
//我是想这样写
pid_t pid1=wait(0);//这是获取第一个子进程pid
pid_t pid2=wait(0);//我本想这是第二个子进程pid,可是结果是-1,我想了下应该第二个子进程是第一个子进程的子进程,所以这样不行

//我的问题就是,父进程怎么样能你获得到第二个子进程的pid呢?

}

谢谢了

------解决方案--------------------
那就在把第二次fork安排在父进程里嘛

pid_t pid1, pid2

pid1 = fork();
if (pid1 > 0)
{
    pid2 = fork();
}
------解决方案--------------------
ls+1

还有就是你写的这个程序,就相当于一个父进程,里面fork()产生一个子进程;lz底子很薄,多看书吧
------解决方案--------------------
fork()成功返回的就是新建子进程的id,楼主弄俩变量接收即可
------解决方案--------------------
#include<unistd.h> 
pid_t f1,s1,s2;
int main()
{
  f1=getpid();//父
  s1=fork();//子1
  s2=fork();//子2
  printf("%d\n%d\n%d\n",f1,s1,s2);
  return 0;
}
------解决方案--------------------
引用:
回11楼,您好,谢谢您的回答,
您说的父→子1
       →子2
这个我明白是怎么回事了,
我想问的就是父→子1→子子1的形式。我想知道父有没有办法打印子子1的pid呢?谢谢啊


 如果楼主是想要表达这个意思的话,那么就需要用到进程间通信,因为子子1与父进程并不具有直接关系。
我这里采用了共享内存的方式,程序如下:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/shm.h>
#include <stdlib.h>

int main(void)
{
        int shmid = 0;
        int *shmbuf = NULL;

        if((shmid = shmget(777, sizeof(int), 0666 
------解决方案--------------------
 IPC_CREAT)) < 0) {
                perror("shmget");
                exit(-1);
        }
        if((shmbuf = shmat(shmid, NULL, 0)) < 0) {
                perror("shmat");
                exit(-1);
        }

        if(0 == fork()) {
                if(0 == fork()) {
                        printf("I'm the child of child1. my pid = %d, pid_father = %d\n", getpid(), getppid());
                        *shmbuf = getpid();
                } else {