我试图通过 C 程序模拟 shell。在我的程序中,每当我运行任何正常(前台)命令时,它都可以正常工作。我还处理了以“&”结尾的命令的后台进程。现在为了处理这个问题,我避免了父进程等待子进程。
问题是每当我第一次在我的 shell 中运行任何后台命令(即以 '&' 结尾)时,它都可以正常工作。但是之后每个命令(正常)都不会终止。我猜它等待先前打开的进程。如何整顿。请你可以提出问题,以便我可以让你更清楚。这是执行上述任务的代码段。
child_id=fork();
if(child_id==0){
//logic fo creating command
int ret=execvp(subcomm[0],subcomm);
}
//Child will never come here if execvp executed successfully
if(proc_sate!='&'){
for(i=0;i<count_pipe+1;i++){
waitpid(0,&flag,0);
}
//something to add to make it not wait for other process in my scenario for second time
}
这里proc_state只是判断是背景还是前景。它只是一个字符。count_pipe 只是一个保存管道数量的变量(例如 ls -l|wc|wc 这包含 2 个管道)。别担心,这一切都很好。