Inter-process-communication-overlaying-process-image
オーバーレイプロセスイメージ
プログラムを実行しており、現在のプログラムから別のプログラムを実行するとします。 これは可能ですか? プロセスイメージをオーバーレイするという概念を実装するのであれば、どうしてですか。 それは問題ありませんが、現在実行中のプログラムについてはどうでしょうか。 現在のプログラムを新しいプログラムでオーバーレイしたため、どのように可能ですか。 現在実行中のプログラムを失うことなく2つのプログラムを実行したい場合、どうすればよいですか? はい、可能です。
子プロセスを作成して、親プロセスと新しく作成された子プロセスを作成します。 すでに親プロセスで現在のプログラムを実行しているので、子で新しく作成されたプロセスを実行します。 このようにして、現在のプログラムから別のプログラムを実行できます。 単一のプログラムだけでなく、その数の子プロセスを作成することにより、現在のプログラムから任意の数のプログラムを実行できます。
次のプログラムを例として考えてみましょう。
===/*ファイル名:helloworld.c */
===/* ファイル名:execl_test.c */
上記のプログラムは、execl_testのプロセスイメージをhelloworldでオーバーレイします。 そのため、execl_test(printf())のプロセスイメージコードは実行されません。
コンパイルおよび実行手順
ここで、1つのプログラム(execl_run_two_prgms.c)から次の2つのプログラムを実行します。
- Hello Worldプログラム(helloworld.c) *1から10まで印刷するwhileループプログラム(while_loop.c)
====/* ファイル名:while_loop.c */
以下は、2つのプログラム(1つのプログラムは子から、もう1つのプログラムは親から)を実行するプログラムです。
====/*ファイル名:execl_run_two_prgms.c */
注-sleep()呼び出しを配置して、子プロセスと親プロセスが順番に実行されるようにします(結果と重複しないようにします)。
コンパイルおよび実行手順
ここで、1つのプログラム(execl_run_two_prgms.c)から2つのプログラムを実行します。上記と同じプログラムですが、コマンドライン引数を使用します。 そのため、2つのプログラム、つまり子プロセスのhelloworld.cと、親プロセスのwhile_loop.cプログラムを実行しています。 これは次のとおりです-
- Hello Worldプログラム(helloworld.c)
- コマンドライン引数(while_loop.c)に従って1からnum_times_strに出力するwhileループプログラム
このプログラムは、広く次のアクションを実行します-
- 子プロセスを作成します
- 子プロセスはhelloworld.cプログラムを実行します *親プロセスはwhile_loop.cプログラムを実行し、コマンドライン引数の値を引数としてプログラムに渡します。 コマンドライン引数が渡されない場合、デフォルトは10とみなされます。 それ以外の場合は、指定された引数値を取ります。 引数値は数値でなければなりません。コードは、アルファベットで指定されている場合は検証されません。
====/* ファイル名:execl_run_two_prgms.c */
以下は、プログラムの子プロセスexecl_run_two_prgms.cから呼び出されるhelloworld.cプログラムです。
====/*ファイル名:helloworld.c */
以下は、プログラムの親プロセスexecl_run_two_prgms.cから呼び出されるwhile_loop.cプログラムです。 このプログラムの引数は、これを実行するプログラム、つまりexecl_run_two_prgms.cから渡されます。
====/* ファイル名:while_loop.c */
コンパイルおよび実行手順
ライブラリ関数に関連するオーバーレイ画像を見てみましょう。
この関数は、引数、パス、および引数で説明されているように、現在実行中のプロセスイメージを新しいプロセスでオーバーレイします。 引数を新しいプロセスイメージに渡す必要がある場合、「arg」引数を介して送信され、最後の引数はNULLになります。
この関数は、エラーが発生した場合にのみ値を返します。 画像関連の呼び出しをオーバーレイするプロセスは以下のとおりです-
これらの呼び出しは、コマンドライン引数(argv [])、環境変数(envp [])およびその他のパラメーターの受け渡しに対処します。