1

main() メソッドを所有するプログラム mainApp を実行し、main() が 5 つのスレッドを作成し、スレッドがいくつかの操作を実行します..など。

今、私のプログラムがクラッシュするかどうか疑問に思っています。したがって、メインアプリが動作しているか停止しているかを監視します。停止した場合は、システム全体を再起動/再起動します。

mainApp と監視プログラムは同時に実行する必要があり、監視プログラムは mainApp のステータスを確認する必要があります。

任意の提案をお願いします。

PS: 私は Linux カーネル 2.6.29 を使用しています。

4

1 に答える 1

2

汎用モニターが必要でない限り、プログラムはそれ自体をモニターできます。

プログラムが最初に起動するときは、プログラム自体がモニターです。プログラムは開始されたばかりなので、「mainApp」は実行されていないため、自動的に分岐します。子プロセスは「mainApp」の役割を引き受けます。モニターは、子プロセスが終了するのを待つようになりました。子プロセスが死ぬと、ステータスをチェックし、再起動が決定したら、再度 fork します。

int main () {
    /*...startup...*/
    int status;
    bool restart = true;
    while (restart) {
        pid_t pid = fork();
        switch (pid) {
        case -1: /* handle error */ exit(EXIT_FAILURE);
        case 0: exit(mainApp());
        default: break;
        }
        pid_t child = wait(&status);
        assert(child == pid);
        restart = check_status(status);
    }
    /*...cleanup...*/
    return 0;
}
于 2012-07-17T01:16:31.937 に答える