我正在编写一个小型 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;
}
From man page http://linux.die.net/man/3/execvp of execvp(3)
exec() 系列函数将当前进程映像替换为
新的过程映像
因此,您当前的进程映像将被命令的映像覆盖!因此你需要使用fork+exec
组合始终使您的命令在子进程中执行,并且当前进程作为父进程继续安全地继续!
更轻松地说,我想用图片来说明问题一图胜千言。无意冒犯:) :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)