私はすべてのcバイナリを繰り返し.out
、その出力をテキストファイルにコピーするループを作成しました(各バイナリの出力はたった1行のハッシュ、1行のプログラム出力です)。これは私のコードです。
for j in {1..10}
do
./gcc-$j.out >> gcc-result.txt
done
残念ながら、一部のバイナリには正しい実行を妨げるいくつかの未知の問題があります(停止して次のプログラムを続行できません)。
私はこのCコードを修正しませんが、私のbashに与えられたタイムアウト(例えば10秒)以内に自動的に次のプログラムを実行するようにジャンプし、ここに「0」を書きたいと思いますgcc-result.txt
。
この問題を解決するためのアイデアがあれば、よろしくお願いします。
答え1
timeout コマンドを使用できます。
if timeout 10 ping google.fr > /dev/null
then
echo "process successful"
else
echo "process killed"
fi
見せてprocess killed
、
if timeout 10 ls /usr/bin | wc -l > /dev/null
then
echo "process successful"
else
echo "process killed"
fi
process successful
これに基づいて、次のように各コマンドを実行してif; then; else; fi
標準出力を一時ファイルにリダイレクトし、成功した場合はその一時ファイルをターゲットファイルにコピーし、失敗した場合はターゲットファイルを生成できます。
プロセスを終了してPIDが再利用されないようにする方法時間制限がないと役に立ちます。
答え2
もちろん、一定時間の実行後にサブプロセスを終了し、bashスクリプトに必要なテキストファイル「0」を追加することもできます。
あなたは見つけることができます指定されたタイムアウト後に子プロセスを終了するBashスクリプト効果がある