ああ、非リエントラント関数の問題を使用して恐ろしいシグナルハンドラを説明してください可能性があります。
問題は、* BSD ping
の機能を追加する保守担当者が最初から安全に作業を行うことにパンクしたことです。
FreeBSDは1994年にこの問題を追加OpenBSDは追加、いつか1998年
で、最終的な修正で、1996年にそれに気づき、それがあることが判明したよりも、問題を解決するために、はるかに短いパスされている必要があり何始めましたこの問題は1997年に発見され、2002年に気づいたが、問題の性質を完全に逃し、2015年まで完全に修正しなかった。
NetBSDはこの問題を1996年に追加したが、まだ修正されています。 NetBSDはおそらくOpenBSDのpingをインポートするはずです。
malloc()
もSTDIO(printf()
も含む)のいずれもリエントラントではなく、シグナルハンドラで使用されるすべてのコードが必要です。
ありように再入の記述を見つけるためのより良い場所の数十、シグナルハンドラの問題、とがありますが、おそらくこの質問とその受け入れ答え(および関連の質問のいくつかは)良いスタートになります:
Why are malloc() and printf() said as non-reentrant?
'triptime'が定数であり、他のFPがコード内にない場合(コンパイル時に' triptime * 1000.0'が実行された場合)、FPルーチンを最適化し、 'printf()'をFP指定子で最適化します失敗する - しかし、ここには文脈がほとんどないので、これは推測に過ぎない。 – chux
「クラッシュする」と言うと、pingバイナリ、OSなどを意味しますか?これは確か3.1 pingからのラインのようです(より最近のNetBSDでは64ビットタイミングのために異なる)。 また、実行しているコマンドラインとアーキテクチャは何ですか?特定のハードウェアに関連する奇妙なハードウェア/ OSの問題である可能性があります。 – abs
質問を更新しました。どうぞよろしくお願いいたします。 – Twinkle