执行不执行进程

时间:2017-10-10 00:47:03

标签: c++

我尝试使用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的同一目录中,该进程永远不会运行。我只是打印出过程的名称。

我很困惑为什么我会得到这种行为。

0 个答案:

没有答案