Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 古怪的等待行为_Linux_Fork_Exec_Waitpid - Fatal编程技术网

Linux 古怪的等待行为

Linux 古怪的等待行为,linux,fork,exec,waitpid,Linux,Fork,Exec,Waitpid,假设我有以下代码 int main(int argc, char* argv[]) { char* program[3] = {"/bin/ls", NULL, NULL}; pid_t pid = fork(); if (pid == 0) { char* envp[1] = {NULL}; execve(program[0], program, envp); } int status; printf("Going to wait for proce

假设我有以下代码

int main(int argc, char* argv[])
{
  char* program[3] = {"/bin/ls", NULL, NULL};

  pid_t pid = fork();
  if (pid == 0) {
    char* envp[1] = {NULL};
    execve(program[0], program, envp);
  }

  int status;
  printf("Going to wait for process with pid: %d\n", pid);
  waitpid(pid, &status, 0);

  return 0;
}
如果我执行它,它会很好地终止

但是,如果我使用“ls-l”(只是更改程序数组)而不是“ls”,它将永远停止。所以这个节目

int main(int argc, char* argv[])
{
  char* program[3] = {"/bin/ls", "-l", NULL};

  pid_t pid = fork();
  if (pid == 0) {
    char* envp[1] = {NULL};
    execve(program[0], program, envp);
  }

  int status;
  printf("Going to wait for process with pid: %d\n", pid);
  waitpid(pid, &status, 0);

  return 0;
}

知道为什么会发生这种情况吗?

程序是否打印“等待…”?打印PID的过程在运行吗?是的,在两种情况下都运行。我不能重现这个。您是在某种网络共享或其他非普通文件系统上使用cwd运行它吗?(比如NFS???)无论如何,问题很可能不是
waitpid()
,而是您的
ls
实际挂起。(将
ls
进程处于什么状态?)将
execve
更改为
execv
使其工作。程序是否打印“将等待…”?打印PID的过程在运行吗?是的,在两种情况下都运行。我不能重现这个。您是在某种网络共享或其他非普通文件系统上使用cwd运行它吗?(比如NFS???)无论如何,问题很可能不是
waitpid()
,而是您的
ls
实际挂起。(将
ls
进程处于什么状态?)将
execve
更改为
execv
使其工作。