gpt4 book ai didi

c++ - execvp( command.argv[0], command.argv) 后程序停止

转载 作者:行者123 更新时间:2023-11-30 00:56:27 26 4
gpt4 key购买 nike

我正在编写一个小的 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;


}

最佳答案

来自 man page execvp(3)

The exec() family of functions replaces the current process image with a new process image

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

我想用一张图片来说明这个问题,因为一张图片说一千个字。无意冒犯 :) :)

enter image description here

关于c++ - execvp( command.argv[0], command.argv) 后程序停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10142837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com