Это очищенный код, который я использую для выполнения команд оболочки.
Хотя isExit
всегда 0, и цикл должен работать до тех пор, пока он равен !isExit
, моя программа завершается после одного цикла командой ls
в качестве аргумента для выполнения.
Есть ли у кого-нибудь идеи? Выход в порядке (ls), но затем программа завершается. Код написан на C, на Eclipse.
Работает на Ubuntu 12, который работает на VM над ОС Windows 7.неожиданное завершение работы программы в цикле
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);
}
}
Программа может выйти из-за исключения или сбоя. Попробуйте положить 'printf (" isExit =% d ", (int) isExit);' вне цикла while и посмотреть, что-то напечатано. – sashoalm