2016-07-04 7 views

答えて

5
ps1%> command1 & command2 

この例では、command1はバックグラウンドから実行され、command2はフォアグラウンドから実行されます。コマンド2が終了するまでコマンドプロンプトを表示しません。この第二の例では

ps1%> command1 & command2 & 

の両方が実行されている一方で、背景からCommand1とcommand2の実行の両方が、すぐに、あなたにコマンドプロンプトを得ました。それをテストして感じること

、あなたがこれを行うことができます:「睡眠4」コマンドがフォアグラウンドで実行されている間、この例では

ps1%> sleep 10 & sleep 4 
[1] 8134 

、あなたは、バックグラウンドコマンドのPID(プロセスID)が表示されます。

ps1%> sleep 10 & sleep 4 & 
[1] 8139 
[2] 8140 

この2番目の例では、2つがバックグラウンドで実行されていることを示し、すぐにプロンプ​​トに戻ります。

+0

Jay、どちらのコマンドラインが最初に表示され、どちらが第2であるかを表示してください。 – osgx

2

&はバイナリ演算子(2つのコマンドの間)ではなく、単一の後置演算子です。つまり、コマンドの後に来て、指定されたコマンドをバックグラウンドで実行するようにシェルに指示します。 &が2つのコマンドの間にある場合、通常の;セパレータを省略することができます。すなわち、foo&; barfoo & barと記述することができます。このようにすると、&はバイナリ演算子のように見えます。

したがって、command1 & command2は実際にはcommand1& ; command2に相当し、「command1をバックグラウンドで実行し、command2を実行してcommand2を完了するのを待つ」という意味です。 command1 & command2 &command1& ; command2&に相当し、「command1とcommand2の両方をバックグラウンドで実行し、直ちにスクリプトの実行を再開する(対話型の場合はプロンプトに戻る)」という意味です。

少なくとも1つのコマンドがバックグラウンドにあるため、2つのコマンドは実際にはどちらの場合も「並列」で実行されます。

関連する問題