1

から: http://www.utdallas.edu/~kcooper/teaching/5375/fall08/Tutorial8/tutorial8.htm

(セクション「C プログラムでの bash スリープとスリープの違い」):

bash sleep コマンドと C プログラムの sleep 関数の動作には大きな違いがあります。C プログラムのスリープ機能は単純な関数呼び出しです。呼び出されると、CPU を必要とする他のプロセスをスケジュールできるように、オペレーティング システムに CPU を明け渡します。次に、指定された秒数が経過すると、スリープを呼び出したプロセスが再び機能し始めます。

sleep コマンド bash の動作は異なります。このコマンドが呼び出されると、それ自体の子プロセスが作成されます。指定された秒数の間実行された後、終了して呼び出しプロセスに戻ります。

  1. なぜbashスリープはとても複雑なのですか? (なぜ fork によって bash sleep が実現するのか?)
  2. bashスリープがCスリープのようにならないのはなぜですか?
4

4 に答える 4

2

その情報は誤解を招くだけだと思います。がシェルによって呼び出されるsleep外部プログラム ( ) である場合、余分な作業はすべて外部プログラムを呼び出すことです。/bin/sleepスリープ プログラム自体はスリープ関数を呼び出すだけです。新しいプロセスをフォークせずsleepに関数を呼び出すだけのコマンドにシェルがビルトインを提供できない理由はありません。sleepただし、その利点はせいぜい疑わしいものです。標準sleepコマンドは常に少なくとも 1 秒間スリープし、外部プログラムを開始するオーバーヘッドはマイクロ秒単位であるため、パフォーマンスに役立つ方法は見当たりません。

于 2012-07-21T21:09:35.760 に答える
2

なぜbashスリープはとても複雑なのですか? (なぜ fork によって bash sleep が実現するのか?

それが bash の機能であるため、プログラムを実行します (UNIX では fork()/exec() を介して実行されます)。たまたま誰かがプログラム/bin/sleepを作成し、指定された秒数だけスリープします。

bashスリープがCスリープのようにならないのはなぜですか?

誰かが bash の組み込みコマンド/機能としてスリープを実装した場合、それは可能ですが、まだ誰も実装しておらず、おそらくそのメリットは価値がありません。

于 2012-07-21T21:13:11.283 に答える
1

外部コマンドを実行するときに、「sleep」(デフォルトは/bin/sleep)を独自のsleepに置き換えることができるため$HOME/bin/sleepです。

外部コマンド=自由。

@nosがすでに言ったように、bashは設計されたもの->プログラムの実行のためにやっています。

于 2012-07-21T21:55:24.633 に答える
0

bashは、他のプログラムやスクリプトを実行するためのものです。バックグラウンドモードでスリープが呼び出されていると考えてください。Bashはスクリプトを実行することになっており、その中のロジックを理解して実装することはありません。行動は正当化されます。

于 2012-07-22T15:38:39.707 に答える