我有粘在等待一个过程的问题。 我已经解决此问题,其唯一的缺陷目前,我有我的shell程序。
问题是程序当用户输入“退出”应该退出。 然而,似乎如果用户输入一个无效的字符串程序卡上的等待()。 这导致必须键入exit两次退出,而不是一次。 如何阻止这种情况发生,我怎么从等待退出()调用当用户输入一个字符串哑巴?
重现步骤:
- 编译并用gcc / g的运行++
- 输入您选择的脏话
- 键入exit
- 注意程序犯规退出(因为它停留在等待(),但提示
- 再次键入exit
- 退出程序
#include <iostream>
#include <unistd.h>
#include "stdlib.h"
#include "stdio.h"
#include <iostream>
#include <string>
#include <sys/wait.h>
#include <sstream>
#include <cstring>
#include <sys/types.h>
#include <sys/stat.h>
using std::string;
using std::cout;
using std::endl;
bool exitstatus;
int argsIndex = 0;
pid_t pid;
int main(void)
{
char * args[100];
string check = "";
while(exitstatus==false)
{
cout<<"tinyshell:~>";
std::getline(std::cin, check);
if(check == "exit"){
exitstatus==true;
}
if(exitstatus==false&&check!="cd..")
{
pid = fork();
perror("");
if (pid < 0) { /* error occurred */
fprintf(stderr, "Fork Failed");
//return 1;
}
else if (pid == 0 ) { /* child process */
execvp(args[0],args);
perror("");
}
else if(check!= "&"){/* parent will wait for the child to complete */
wait(NULL);
perror("");
// cout <<"Child Complete" << endl;
}
else
{
}
}
}
return 0;
};