私はシェルをシミュレートするプログラムを持っています。私はバックグラウンドでの実行を作成しています。FORK -> EXEC で別のプロセスを実行すると、それでも時々入力 (コンテキスト スイッチまたは smthng) を取得します。自分からプロセスを完全にブロックしたいシェルは、Linux の & 演算子とまったく同じようにします。シグナルを使用したソリューションを探していますが、それを行う方法が見つかりません。助言がありますか?
if((son = fork())==0){//son process
getcwd(cur, 1024);
strcat(cur, "/");
strcat(cur, tokens_set[0]);
tokens_set[0] = cur;
i = execvp(tokens_set[0],tokens_set); //run the command
if(i == (-1)){
perror("couldn't find the command: ");
}
exit(0);
}else{ // father process
printf("and father proccess goes on\n");
}
その後、父のプロセスが続き、息子のプロセスは単に入力の取得->同じプログラムの出力です。私の場合、父親が情報を得る場合もあれば、息子が情報を得る場合もあります。また、valgrind で実行すると、息子は常に入力を取得します。