ユーザーのブラウザーとハードウェア デバイス間のトラフィックを管理する、c++ で記述されたサーバー プログラムがあります。このサーバーは私の centos マシンで実行されます。プログラムを正常に実行すると、問題なく実行されます。
しかし、プログラムをデーモンとして実行しようとすると、いくつかの問題が発生します。これはデーモンの私のコードです:
pid_t pid, sid;
pid = fork();
if(pid < 0){
exit(EXIT_FAILURE);
}
if(pid > 0) {
exit(EXIT_SUCCESS);
}
umask(0);
sid = setsid();
if(sid < 0){
exit(EXIT_FAILURE);
}
if((chdir("/")) < 0){
exit(EXIT_FAILURE);
}
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
while(1){
//my program here
}
プログラムは正常に起動します。親は init です。何時間も実行できますが、約 10 ~ 15 の要求を行うと停止します。
プログラムをデーモンとして実行するためのコードは正しいと思います。私が心配しているのは、実際のコードです。従わなければならないルールはありますか?避けるべき悪い行動はありますか?コマンドライン出力(私が現在多く作成している)など、デーモンで許可されていないコマンドはありますか?