2012-01-18 13 views
0

最初に私の悪い英語をお詫び申し上げます。Cソフトウェアでクラッシュする箇所を定義する方法

ビットの背景この初心者ソフトウェアの問題のため申し訳ありませんが、私は私の独自のロジックで失われてしまった...

:私は生成しようとしているC・ネットワーキング・プロジェクト、に取り組んでいます

サーバは、増加する時間内に徐々に増加するUDPメッセージを受信する。私は、クラッシュしているときに特定のアドレスにレポートを送ることができるこのサーバ上の単純な「マネージャ」にしようとしています。

私は、このマネージャーをサーバー側のリスナーとして設定しています。したがって、サーバーがあらかじめ定義されたポート内にメッセージを受信しない場合は、サーバーに障害が発生したと見なします。 しかし、このことは、何らかの決定論的アプローチではありません。このサーバーがクラッシュした場合、どのくらい時間を指定する必要がありますか? (5分以内にメッセージが届いていない場合は、それはクラッシュしているのではないでしょうか、必ずしも真実ではありません。 gdbのようなアプリでこれを行うことができます。サーバー(フレームワーク)がクラッシュすると、自動的にコアダンプファイルが生成されます。私はこのようなことをする必要があるので、フレームワークがクラ​​ッシュすると、 "hello crash"を印刷するのと同じくらい簡単になります。サーバークラッシュ(Cを使用した)場合は、私にレポートを与えることができ、サーバ上の「管理者」を作成する方法

任意のアイデアを大幅に

が終了コードそんなに

+0

*クラッシュ*(アプリケーションが予期せず終了する)、または*ハング*(アプリケーションが応答を停止しても終了しない)を意味しますか? – wallyk

+0

また、「ネットワーク接続の喪失」をクラッシュとして定義しますか? –

+0

@wallyk:予期せぬことにあります.. – heike

答えて

1

ありがとういただければ幸いです信号によってシグナルが終了したかどうかがプロセスによって表示されます。あなたは、Cプログラムを作成し、終了コードを取得したり、シェルスクリプトでそれを行うにはwait()を使用することができます。

#!/bin/sh 

./server "[email protected]" 

EXIT=$? 

if [ $EXIT -eq 0 ] 
then 
    echo exit success 
else 
    if [ $EXIT -ge 128 ] 
    then 
     echo exited with signal $(($EXIT - 128)) 
    else 
     echo exited with code $EXIT 
    fi 
fi 

あなたは、障害ケースや信号ケースのためにサーバーを再起動することを選択することができます。

ほとんどのサーバーは慎重にデバッグする必要があり、クラッシュすると自動的にキャッチして再起動するとは考えていません。

+0

この回答は、サーバーがPOSIX-ishを実行していることを前提としています。 GCCは関与しているが、とにかく指摘する価値があることを前提とした公正な仮定。 –

+0

@ben jackson:ありがとう。しかし出口が何であるか教えてください-128。 – heike

+0

@wike私は 'wait()'マンページ(例えばhttp://linux.die.net/man/2/waitを参照)を指摘しておきましょう。このマクロは 'WIFSIGNALED() 'と友達。私のシェルの例では、Cプログラムでは見られないように、 '0x80'ビットをテストしています(そしてアンセットしています)。 –

関連する問題