我尝试使用C ++创建基本shell。
这是家庭作业的一部分,所以我需要遵循一些限制。
以下是我现在设置的方法:
argv
包含进程名称及其参数这是我的代码:
void simple_shell::exec_command(char **argv){
// TODO: fork a child process to execute the command.
// parent process should wait for the child process to complete and reap it
int rc = fork();
if (rc < 0) {
cout << "Fork failed" << endl;
exit(1);
} else if (rc == 0) { // child process
cout << "child process running" << endl;
char *processName = argv[0];
cout << processName << endl;
char *argument1 = argv[1];
cout << argument1 << endl;
execvp(processName, argv);
} else {
wait(NULL);
cout << "finished" << endl;
}
}
当我运行shell时,我写了#34; hello world&#34;,这就是我打印的内容:
子进程运行
你好
世界
基本上,fork是成功的,子进程运行,并且参数正确传递(如打印hello world所示)。但是,父进程从不打印&#34;已完成&#34;。
其次,当我传入一个进程的实际进程名称时,该进程存在于我执行shell的同一目录中,该进程永远不会运行。我只是打印出过程的名称。
我很困惑为什么我会得到这种行为。