私は/usr/sbin/service
1行のコードを含むクラシックサービススクリプトを理解しようとします。
exec env -i ...... ${SERVICE} .....
私はexec
コマンドがプロセスを分岐せずに保存し、プロセスイメージをコマンドに置き換えることを知っています。その後、COMMANDを使用しているかのように、現在のプロセスが実行されます。
についてenv
?上記と同じでしょうか?
フォークよりも現在のプロセスを交換する方が良いのはなぜですか?
ベストアンサー1
これを使用する理由は、env -i
残りのコマンドを実行する前に環境変数をクリアすることです。
あなたの質問に実際に答えるには、Windowsを検討してください。
Windowsでは、新しいプログラムを起動する非常に合理的な方法であるように見える「CreateProcess」を提供しています。ただし、CreateProcessの問題は、新しいプロセスに数十の設定を指定する必要があり、各設定にCreateProcess関数呼び出しに別のパラメータが必要であることです。これは、親が子供に対して持つことができる制御の量を制限します。
Unixでは、プロセスは最初に自己複製(すべてのプロセス設定を継承)してから、2番目のコピーが設定を変更して最後に新しいプログラムに置き換えることができるというアイデアを出しました。これにより、CreateProcessなどの引数としてそれぞれを追加しなくても、現在のディレクトリ、環境、ファイルハンドル、開いているソケット、信号マスクなどの項目を変更するために任意/システムコールを使用できます。
その後、さまざまな起動操作を実行するプログラムを「接続」するきちんとした機能があります。各プログラムは自分自身をいくつか変更した後、次のプログラムを「実行」します。 env
これはプログラムの一つです。独自の環境を変更し、別のプログラムを実行します。バラよりCHPSTこれは、起動したいプログラムで変更できるすべてのものの良い例です。