私の製品では、フォークと実行サービス プロセスを別のプロセスで実行し、その終了を待つウォッチドッグ プロセスを作成しました。何らかの理由でプロセスが終了した場合、ウォッチドッグ プロセスは別のスレッドを作成し、プロセスを再開します。
コメントに記載されているように、クラッシュした理由を確認する必要があります。まず、プログラムの終了値を読み取ることができます。
以下は、開始するための簡単なプログラムです。
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
create_process();
return 0;
}
void create_process()
{
int exit_code;
if(fork() == 0)
{
exec("./your_service");
}
else
{
wait(&exit_code);
if(WIFEXITED(exit_code))
{
/* Program terminated with exit */
/* If you want, you could decode exit code here using
WEXITSTATUS and you can start program again.
*/
return;
}
else
` {
/* Program didn't terminated with exit, restart */
create_process();
}
}
}
システムの起動時にサービスを開始するには、/etc/rc.local
スクリプトを編集し、ウォッチドッグ プロセスを実行するためのコマンドを追加するだけです。