Unixでは、スクリプト/プログラムはどのように実行されますか?

Unixでは、スクリプト/プログラムはどのように実行されますか?

Unixスクリプトの実行モードについて質問があります。

たとえば、次の行を含むスクリプトは次のとおりです。

command B
function C()
{
Myscript   // Myscript is a script 
command  D
}
command E

Myscript実行に時間がかかる場合(例:5分)、次のコマンド(command D)が実行Myscriptまたは完了するのを待ちます。

答え1

特定のスクリプトの場合、どちらも実行されませMyscriptcommand D。関数を定義しましたが、C呼び出しませんでした。

実行順序は次のとおりです。

  1. command B完了するまで実行します。
  2. command E完了するまで実行します。

呼び出すと、完了するまでC実行されMyscript、次にcommand D完了するまで実行されます。

シェルスクリプトから呼び出されるすべては表示された順序で実行され、完了するまで実行されます。他のジョブと並列に何かを実行する必要がある場合は、ジョブ制御を使用する必要があります(&&文字を使用してジョブをバックグラウンドに配置する方法を参照)。簡単な例:

A
B

完了するまで実行し、A完了Bするまで実行します。スクリプトが完了しました。

A &
B

バックグラウンドで実行し、AフォアグラウンドでBを実行します。シェルスクリプトはB完了すると終了します。Aまだ実行している可能性があります。

A &
B &

Aバックグラウンドで実行してから(A完了を待たずに)Bバックグラウンドで実行します。演劇はすぐに終了します。

A &
B &
wait

Aバックグラウンドで実行してから(A完了を待たずに)Bバックグラウンドで実行します。その後、スクリプトは待ってから完了するAB終了します。

答え2

1つの例外がありますが、これについては後で詳しく説明します。ただし、これらのコマンドは同じシェルで実行されます(新しいMyscriptシェルを開いても、command Dそのコマンドが実行されるのとまったく同じ「親」シェルを持つことになります)。 * NIXシェルは並列化をサポートしていないため、制御がMyscript通過できるように実行を停止する必要があります(終了コードを使用)command D

シグナルをMyscript使用したり、後続のデタッチを作成して分離したりする場合は例外です。これにより、スクリプトがバックグラウンドに配置されます。NOHUP&Myscript

次のコードを調べてください。

openssl enc -e bf -in verybigfile -out outputfile -k thisismykey &; # this is a long operation because of the size of the very big file
echo 'hi!' # this will be written during the encrypting operation

今これがほとんど自明になることを願っています。


Alexiosの答えには良い点が含まれています。関数を呼び出さないので実行されません。

関連情報