execve()仅在第一个循环上返回错误

时间:2014-10-19 16:38:16

标签: c exec fork waitpid

我一直困惑于此,现在我可以使用一些帮助了。 我正在尝试创建一个循环,它将分叉子进程并通过execve()调用“echo hello”。

#include <stdio.h>  
#include <stdlib.h>
#include <sys/wait.h>

int main(int argc, char *argv[],char *envp[]){

  int i = 0;

  while(i<10){ 
    pid_t pid;
    pid = fork();

    if(pid != 0){
      int status;
      waitpid(-1, &status, 0);
    }

    if(pid == 0) {
      char *arg_array[2];
      arg_array[0]="echo";
      arg_array[1]="hello";
      char filename[] = "/bin/echo";     
      if (execve(filename,arg_array,envp) == (-1)) {
        printf("ERROR!\n");
        exit(1);
      }
    }  
    i++;
  }
}

首先,代码在第一次运行时失败,而在每次后续运行时都成功。 现在,在清理它以便在这里展示之后,它将不会成功 - 我得到的只是错误! x 10.我必须进一步破坏某些东西,而且我无法分辨出什么。

这只是我在本网站上的第二个问题,所以如果您有任何改进我的问题/建设性批评的建议,请分享!谢谢。

1 个答案:

答案 0 :(得分:0)

您缺少NULL数组的最终argv元素。在perror之后使用execve也会为您提供正确的错误消息。因此:

char *arg_array[3]; arg_array[0] = "echo"; arg_array[1] = "hello"; arg_array[2] = NULL;

此外,您缺少#include <unistd.h>