所以我正在创建一个基本的shell。我分叉并调用execvp。如果命令(即sleep 5m &
)具有"&"最后,我的父进程不会等待孩子。否则它确实如此。所以在子进程中,我调用了execvp(args[0],args)
。如果args为sleep 5m &
,我该怎么删除&这样子进程只能读取sleep 5m
而不是&因为我猜这是问题的来源。
if(pid==0){
execvp(args[0],args);
}
//if parent process
if(!(strcmp(args[0],"&")==0)){
wait(0);
}
编辑:我能够通过使用标志解决它,如果用户输入包括&,我打开了标志。现在它可以工作
答案 0 :(得分:0)
char *idx = strrchr(cmd, '&');
if(idx != NULL)
*idx = '\0';
找到最后一个&在字符串中,用' 0'替换它。 (字符串结束)