分割エラーを引き起こしたコマンドの周りにwhileループを構築します。

分割エラーを引き起こしたコマンドの周りにwhileループを構築します。

特定の状況で分割エラーが発生するプログラムがあります。分割エラーが発生したときにデータを処理するコマンドを実行し、再びコマンドを実行し、分割エラーが停止するまでこれを続けたいと思います。

擬似コードのおおよその試みとして、

dodgy_command

while SegFault
         dataProcessing
         dodgy_command
end

Trapコマンドを使用する必要があるようですが、コマンド構文を理解していません。

答え1

プログラムが異常終了すると、終了コード(シェルに見られる)には通常高いビットが設定されているため、値は128以上です。したがって、簡単な解決策は次のとおりです。

dodgy_command

while [ $? -ge 128 ]
do
  process_data
  dodgy_command
done

他の種類のエラーではなくsegfaultだけが必要な場合はwhileラインになります$? -eq 139(SEGVは信号11、128 + 11 = 139であるため)。

失敗時に高い値の終了コードを取得できない場合は、アプリケーション自体がエラーをキャッチして他の終了コードを強制的に適用していることを意味できます。

答え2

これを行うためにどの言語を使用すべきかについては言及していません。だからシェルスクリプトを使用するとします。

あなたは正しいです。トラップを使いたいです。 Bashのトラップは、信号が受信されたときに文字列を実行する必要があります。私は、信号をキャッチしたときに何をすべきかを明確に定義できるように、関数呼び出しにする傾向があります。

以下はサンプルスクリプトです。

#!/bin/bash

# define the function that will handle the trap
sigSegFault() { echo "Inside sigSegFault"; }

# Trap the Segmentation Violation (signal 11) signal
trap sigSegFault SEGV

# Start infinite loop    
while [[ true ]]; do
  sleep 10
done

exit 0

シンプルだが要求されたコンテンツの基本が含まれています。

関連情報