程序在execvp之后停止(command.argv [0],command.argv)

Aar*_*ron 1 c++ operating-system execvp

我正在编写一个小shell程序,它接受一个命令并执行它.如果用户输入无效命令,则if语句返回-1.如果命令正确则执行命令,但是一旦执行命令,程序就会结束.我做错了什么不会在它之后执行代码行?我用ls和cat命令测试了execvp(command.argv [0],command.argv),所以我很确定它有效.这是我的代码.

  int shell(char *cmd_str ){
  int commandLength=0;
  cmd_t command;
  commandLength=make_cmd(cmd_str,  command);
  cout<< commandLength<<endl;
  cout << command.argv[0]<< endl;
  if( execvp( command.argv[0], command.argv)==-1)
//if the command it executed nothing runs after this line
  {
    commandLength=-1;

}else
{
  cout<<"work"<<endl;
}

  cout<< commandLength<<endl;
   return commandLength;


}
Run Code Online (Sandbox Code Playgroud)

Pav*_*ath 6

手册页execvp(3)

exec()函数系列用新的过程映像替换当前过程映像

因此,您的当前过程映像将被命令的图像覆盖!因此,您需要fork+exec始终使用组合,以便您的命令在子进程中执行,并且您当前的进程作为父进程安全地继续!

在较轻松的音符上,我想用图片来说明问题,因为图片说的是千言万语.没有冒犯的意图:) :)

在此输入图像描述