2

これらのシェル コマンドを実行すると、次のようになります。

SH1$ bash
SH2$ exec date &
[1] 375
SH2$ Mon Apr 22 15:04:36 BST 2013
[1]+  Done                    exec date
SH2$

これ&は よりも優先されexec、SH2 プロセスは実行されたままになります (ksh と Solaris /bin/sh で同じ結果になります)。

どうしてこれなの?それは明確に定義された (または必要な) 動作ですか、それとも各実装に任されていますか?

4

2 に答える 2

1

はい、これは標準的な動作です。POSIX shell grammarを参照してくださいexec。明示的にカバーされていないことに注意してください。通常のものとして扱われcmd_nameます。

于 2013-04-22T14:34:03.427 に答える
-1

exec は、現在のシェルを置き換えてコマンドを実行します

exec date

date を効果的に実行して終了し、元のシェルを「失う」ようにします

exec date &

子プロセスで exec を実行します。これが & 演算子の定義済みの動作です。結果はほとんど同じです

( exec date )

& と ( ) はどちらも新しい子プロセスを作成し、新しいプロセスのコンテキストでコマンドを実行します。

于 2013-04-22T14:34:30.117 に答える