Linux bashはバックグラウンドプロセスの集約を防ぎます。

Linux bashはバックグラウンドプロセスの集約を防ぎます。

私のスクリプトは束を作ります。これにより、2回実行するのを防ぎます。スクリプトが別のスクリプトを実行できるため、問題が発生します。時には、他のスクリプトがプロセスをバックグラウンドに残すことがあります。残念ながら、彼らは私に不要な群れを受け継いだ。指定された実行可能ファイルを実行する前にいくつかのファイルハンドルを閉じるラッパーはありますか?

私はLinux Debianを使用していますが、重要なLinuxディストリビューションやバージョンではありません。

詳細なシナリオ:

  1. 私のスクリプトAが実行されました。
  2. 私のスクリプトAは人々を私に集めます。
  3. 私のスクリプトAは外部実行可能ファイルBを実行します。
  4. 外部Bは実行可能ファイルCをバックグラウンドで実行します(無理継承)。
  5. 外部Bは完了し、Cはバックグラウンドに残ります(群を継承します)。
  6. Bが完了したので、私のスクリプトAは完了です。
  7. 別のループ、私のスクリプトAが実行されます(ポイント1のように)。
  8. Cがまだ実行中であるため、私のスクリプトAのためにクラスタが失敗します。

閉じた集約ファイルハンドルを使用して外部実行可能ファイルBを正しく実行したいと思います。 Flockは、私のスクリプトAだけが実行されるまで維持する必要があります。私は「群れ穴」があるので、2時から3時の間にきつい群れが欲しくありません。これに似たパッケージオペレーティングシステムはありますか?

ベストアンサー1

~によると群れのマニュアルページ、これは-uまたは--unlockオプションを使用します。

-u, --ロック解除

ロックを下げてください。ファイルを閉じるとロックは自動的に削除されるため、通常これは必要ありません。しかし、特別な場合には必要な場合があります。たとえば、閉じたコマンドグループがロックを維持してはならないバックグラウンドプロセスを分岐した可能性があります。

したがって、規定された技術は次のようになります。

(
    flock 200 | exit 99
    # some commands that should be guarded by the lock
    # some of them fork daemons that keep our lock file open
    flock --unlock 200 # we're done with the lock, we can release it
) 200>/path/to/lock-file

おすすめ記事