gpt4 book ai didi

c - 循环运行的程序意外终止

转载 作者:太空狗 更新时间:2023-10-29 11:30:09 28 4
gpt4 key购买 nike

这是我用来执行 shell 命令的干净代码。
虽然 isExit 始终为 0 并且只要它是 !isExit 就应该运行循环,但我的程序在使用命令 ls 作为参数的一个循环后终止执行。
有人有什么主意吗?输出正常 (ls),但随后程序终止。代码在 Eclipse 上用 C 语言编写。
在 Ubuntu 12 上运行,它在 Windows 7 上的 VM 上运行。

int main() {
int numberOfCommands, numOfWords, i, isExit = 0, isBackGround = 0, isSucces;
char input[256];
char *cmdAndArgs[256];
char *commands[256];
do{
// gets and parses user command...
ExecuteCmd(cmdAndArgs);
} while (!isExit);
return EXIT_SUCCESS;
}

void ExecuteCmd(char *cmdAndArgs[]){
pid_t pid;
pid = fork();
if (pid != 0) {
execvp(cmdAndArgs[0], cmdAndArgs);
exit(0);
} else {
waitpid(pid, &status, 0);
}
}

最佳答案

您在父进程中运行 execvp,而不是在子进程中。逻辑:

pid_t pid;
pid = fork();
if (pid != 0) {
execvp(cmdAndArgs[0], cmdAndArgs);
exit(0);
} else {
waitpid(pid, &status, 0);
}

应该反转为:

pid_t pid;
pid = fork();
if (pid == 0) { /* Child */
execvp(cmdAndArgs[0], cmdAndArgs);
exit(0);
} else if (pid == -1) {
perror("fork");
} else {
waitpid(pid, &status, 0);
}

fork() 的返回码是:-1 == fork failed(使用 errno 确定原因)。 0 == 我是 child 。 > 0 == 我是家长。查看reference for fork在返回值部分下。

关于c - 循环运行的程序意外终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10652601/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com