从C中的父进程获取子值(退出代码)

从C中的父进程获取子值(退出代码),c,C,我想知道是否有办法进入while语句(printf(“孩子的死亡:%d,退出代码为%d\n”,I,WEXITSTATUS(status));)子对象的整数I 我正在从execlp获取输出(该程序内部有一个超时,返回一个随机数),但我想获取每个返回响应的标识I int main (int argc, char *argv[]) { int i; int pid; int status; int pro= atoi (argv[argc - 1]); char programNa

我想知道是否有办法进入while语句(
printf(“孩子的死亡:%d,退出代码为%d\n”,I,WEXITSTATUS(status));
)子对象的整数
I

我正在从
execlp
获取输出(该程序内部有一个超时,返回一个随机数),但我想获取每个返回响应的标识
I

int main (int argc, char *argv[])
{
  int i;
  int pid;
  int status;
  int pro= atoi (argv[argc - 1]);
  char programName[] = "./child";

  if (argc < 2 || argc > 2){
    printf("Only one argument is allowed\n"); 
    exit (0);
  }


  for (i = 0; i < pro; i++)  
  { 
    pid = fork();
    if(pid == 0) 
    { 
      printf("Created child %d with pid=%d\n",i, getpid());
      char child[10];
      snprintf(child, 10, "%d", i);
      if (execlp(programName, programName, child, NULL) < 0){
        printf("Error running: %s\n",programName);
      }
      exit(2); 
    }    
  }
  while(wait(&status)>0)
  {
    if ( WIFEXITED(status) ){
      printf("Death of child: %d with timeout %d\n",i, WEXITSTATUS(status));
      if (WEXITSTATUS(status) > 5)
      {
        printf("Time exceeded\n");
      }
    }
  } 
  exit (0);
}
intmain(intargc,char*argv[])
{
int i;
int-pid;
智力状态;
int-pro=atoi(argv[argc-1]);
char programName[]=“/子级”;
如果(argc<2 | | argc>2){
printf(“只允许一个参数\n”);
出口(0);
}
对于(i=0;i0)
{
如果(妻子退出(状态)){
printf(“子级死亡:%d,超时%d\n”,i,WEXITSTATUS(status));
如果(WEXITSTATUS(状态)>5)
{
printf(“超出时间\n”);
}
}
} 
出口(0);
}

也许我的方法不正确。欢迎任何提示。我是c语言的新手

wait
将返回更改的进程的pid。要将其映射回
i
,请将从
fork
返回的所有PID保存到一个表中,并作为查找引用返回

pid_t table[pro] = {0};
pid_t child=0;

for (i = 0; i < pro; i++)  
  { 
    pid = fork();
    if(pid == 0) 
    { 
      printf("Created child %d with pid=%d\n",i, getpid());
      char child[10];
      snprintf(child, 10, "%d", i);
      if (execlp(programName, programName, child, NULL) < 0){
        printf("Error running: %s\n",programName);
      }
      exit(2); 
    }
    else
    {
      table[i] = pid;
    }    
  }
  while((child=wait(&status)) > 0)
  {
    if ( WIFEXITED(status) ){

      i = -1;
      for (int j = 0; j < pro; j++)
      {
        if (table[j] == child))
        {
          i = j;
          break;
        }
      }

      printf("Death of child: %d with timeout %d\n",i, WEXITSTATUS(status));
pid_t表[pro]={0};
pid_t child=0;
对于(i=0;i0)
{
如果(妻子退出(状态)){
i=-1;
对于(int j=0;j
可以进入另一个进程的内存,但几乎肯定不是您想要的,并且可能需要100多行代码。您在这里试图实现什么?您是否考虑过使用线程?这是否回答了您的问题?