Cプログラムを介してシェルをエミュレートしようとしています。私のプログラムでは、通常の (フォアグラウンド) コマンドを実行するたびに正常に動作します。また、「&」で終わるコマンドでバックグラウンド プロセスを処理しました。これを処理するために、子プロセスを待機する親を回避しました。
問題は、シェルで初めてバックグラウンド コマンド (つまり、'&' で終わるコマンド) を実行すると、正常に動作することです。しかし、その後、各コマンド(通常)は終了しません。以前に開いたプロセスを待っていると思います。修正する方法。私はあなたに自分自身をより明確にすることができるように、質問をすることができます. これは、上記のタスクを実行しているスニペットです。
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 つのパイプが含まれます)。これはすべて正常に機能していることを心配しないでください。