所以我正在创建一个基本的shell。我fork并调用execvp。如果一个命令(即sleep 5m &
)最后有“&”,我的父进程不会等待子进程。否则它。所以在孩子的过程中,我打电话给execvp(args[0],args)
。如果参数为sleep 5m &
,如何删除&,以便子进程只读取而不是&,因为我猜测问题来自哪里。无效的时间间隔&在我创建的基本shell中
if(pid==0){
execvp(args[0],args);
}
//if parent process
if(!(strcmp(args[0],"&")==0)){
wait(0);
}
编辑:我是能够通过使用标志来解决它,如果用户输入包括&,我打开标志。现在,它的工作原理
只是描述散文的代码几乎是永远不够清晰(散文,不像代码,可以替换它以多种方式解释)。请显示代码的[最小完整且可验证的示例](https://stackoverflow.com/help/mcve),以说明问题。 – kaylum
你写的代码是什么?请至少张贴您面临问题的代码片段。这样,我们可以帮助你更好 –
简单的搜索是一个非常糟糕的主意。如果'&'被转义或字符串文字会怎么样?您需要正确解析输入。语句的实际执行在设计解释器(shell是)方面的工作较少。 – Olaf