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
使其工作。