わかりました、私の仕事は、 & が最後の引数であるかどうかに応じて、特定のプロセスをバックグラウンドまたはフォアグラウンドで実行する C プログラムを作成することです。グーグルで調べたところ、バックグラウンドでプロセスを実行するには、親プロセスで「wait(&status)!=pid」という行をスキップするだけでよいことがわかりました。子プロセスはバックグラウンドで実行されます。
これにより、fork() に関するクエリが表示されます。fork() と入力すると、子プロセスが作成されます。さて、私の質問は - プログラムの制御は、 fork() を呼び出した直後に、常に親プロセスの前に子プロセスに渡されますか? コントロールが最初に親プロセスに渡される可能性はありますか? それとも、両方のプロセスが並行して実行されますか?
プロセスが並行して実行される場合、待機部分のスキップがどのように機能するかを確認できますが、プロセスが順次実行される場合は機能しません。
例えば:-
pid=fork()
if(pid==0) execvp("ls",argv);
else if(pid>0) return pid;
仮定すると、子プロセスが最初に実行されます。「pid==0」は true と評価され、execvp が呼び出され、ls が子プロセスに上書きされます。「ls」が終了し、制御が親プロセスに移ります。ここでは、待機コマンドが存在せず、ls が終了してから、親プロセスに戻ります。バックグラウンドでの作業は行われません。
親プロセスが最初に実行された場合、pid>0 であることがわかり、制御がメイン関数に渡されます。待機コマンドがないため、少なくとも親プロセスが終了するまで、子プロセスはまったく実行されません。
では、実際にどのように機能するのでしょうか。私のコンセプトのいくつかは的外れかもしれません。もしそうなら、親切に私を修正してください。
ありがとう。