我的目标是编写一个程序,用户输入一个系统命令,我的代码接受该命令并在另一个终端窗口中运行它,而不会锁定用户输入命令的终端。
现在,我所拥有的是读取命令的代码,fork()
pocess并将命令作为子进程执行。
这是主要的shell解释器:
//argv[1] is the path for the command runner binary
int main(int argc, char const *argv[]){
char cmd[512];
pid_t childPID;
while(1){
cout << "Enter the command line: ";
//reads command from user
cin.getline(cmd, 512,'\n');
//fork the current parent process
childPID = fork();
cout << "childPID = " << childPID;
if(childPID == 0){
//starts a execution of the command runner, passing the user command as argument
execl(argv[1],argv[1],cmd, (char *) 0);
}
else{
cout<<"Error on forking parent"<<endl;
}
}
return 0;
}
这是命令执行程序,它留在另一个文件中,为用户输入的每个命令调用:
int main(int argc, char const *argv[]){
system(argv[1]); //runs system command
cout << endl;
cout << "Press enter to continue...";
cin.get();
return 0;
}
我遇到的问题是,我无法找到一种方法来打开执行另一个终端的命令。另一件事是循环一次跳两次,我认为这是一个糟糕的实现。