3

バックグラウンドでプロセスを実行し、必要なときにのみその出力を受け取る最良の方法は何ですか?

使用目的: 初期化が多いプロンプト出力スクリプトを、プロンプトの実行ごとではなく、セッションごとに 1 回初期化します。注: 双方向通信が必要です。シェルは、新しいプロンプトがいつ必要か、最後のコマンド ステータスは何かを通知する必要があります。

既知の解決策:

  • ファイルシステム上に明示的に作成されたファイル (FIFO ファイル、UNIX ソケット): ファイル名を選択する必要があることを意味するため、これを回避することをお勧めします。クラッシュの場合。
  • zsh/zpty モジュール: これは、このジョブのやり過ぎのようなものであり、bash では機能しません。
  • coprocesses: bash では機能せず、AFAIK ではセッションごとに 1 つのコプロセスのみが許可されます。
4

1 に答える 1

1

Bash は 4.0 以降のコプロセスをサポートしていますが、複数のコプロセスはまだ実験段階です。

明示的に作成されたファイルをいくつか使用し~/.myThing-$HOSTNAME/fifo、それらがユーザーおよびホストごとである場合は名前を付けます。flockコマンドがまだ実行されているかどうかを比較的簡単に判断し、オプションで開始するために使用できます。

(
  flock -n 123 || exit 1
  rm/mkfifo ..
  exec yourServer < .. > ..
) 123> ~/".myThing-$HOSTNAME/lockfile"

コマンドまたはサーバーが停止すると、ロックが自動的に解除され、長さゼロのファイルがいくつか残るだけになります。次回のサーバー起動時に、それらを削除して再度設定します。

サーバーへのクエリも同様ですが、ロックが使用されていない場合は終了します (オプションで競合を避けるために待機ロックを使用します)。

于 2013-01-22T21:41:47.233 に答える