特定の状況で分割エラーが発生するプログラムがあります。分割エラーが発生したときにデータを処理するコマンドを実行し、再びコマンドを実行し、分割エラーが停止するまでこれを続けたいと思います。
擬似コードのおおよその試みとして、
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
シンプルだが要求されたコンテンツの基本が含まれています。