時々、AIXのbashでエラーが発生します。システム呼び出しが中断されました。

時々、AIXのbashでエラーが発生します。システム呼び出しが中断されました。

AIX の bash でプロセス置換に問題があります。この問題は非常にまれで、サーバーがロードされたときにのみ発生します。

エラーメッセージの例は次のとおりです。

line 9: /tmp//sh-np-7841523: Interrupted system call

私のスクリプトをもっと詳しく見る前に、プロセス置換の問題がすでに発生しているかどうかを知りたいです。あるいは、プロセスの交換を実装する際に従うべきいくつかの推奨事項についてコメントを得てください。

注:この単純なスクリプトは上記のエラーを生成できます。

#!/bin/bash
read var < <(echo)

しかし、私はこれを強調します。この種のエラーは非常にまれです。体系的に再現できません。スクリプトがテストされるサーバーは本番サーバーです。

答え1

最新バージョンのbashを使用していることを確認してください。その場合はバグを報告してください。既存のバイナリをインストールした場合は、bashバイナリをどこで入手したかを正確に指定してください。 bashを直接コンパイルした場合は、どのコンパイラとコンパイル時の設定を正確に使用したのか、どこで取得したのかを指定してください。ソースコードを取得するには。また、AIX およびハードウェア・アーキテクチャーの正確なバージョンを参照してください。もちろん、ここでやったようにエラーを再現する方法も言及してください。


「システムコールが中断されました」は実際にはエラーではありません。EINTR呼び出し元にシステムコールがまったく実行されていないことを(試行したが失敗したことを)通知するエラー状態()。アプリケーション処理の一般的なアプローチは、シグナルハンドラのEINTR実行などの他の処理を実行した後にシステムコールを再実行することです。EINTR存在の目的は、ブロックシステムコールを行うときにアプリケーションが緊急作業を実行する機会を提供することです。あなたは読むことができますEINTRをチェックして関数呼び出しをいつ繰り返す必要がありますか?そしてより安全な信号処理のための再入口機能の使用より多くの背景素材を読んでください。

EINTRBashは、予期しない場所でシステムコールによって返された結果を表示します。一般的な方法でエラーを報告します。これは、オペレーティングシステムの問題やバグによって発生する可能性があるバグです。

関連情報