Debian上でgccコンパイラにおいてプログラムを作成している初心者です。
メインプログラム(eco_deg)から一定間隔で他のプログラム(eco_c)を起動、パラメータを渡します。起動した外部プログラムは一定の処理を行った後に終了し、制御がメインプログラムに戻ってきます。
その、他のプログラムを起動させるとき、fork関数を用いているのですが、プログラムを1ヶ月程度動かしているとforkのところでエラーが出て、プログラムが停止してしまいます(エラーを起こす規則性は捉えることができていません)。
お聞きしたいのは次の二点です。
1 fork関数がエラーを返す要因としては何が考えられるのでしょうか。
2 fork関数でエラーを得た場合、自分自身を再起動するような下に記載する書き方は有効なのでしょうか。
1につきましては、自身のプログラムに起因しているといわれると返す言葉がないのですが、参考になるような情報をいただけましたらありがたく存じます(現在は下のプログラムにおいて、pid < 0の部分は、はエラーログ出力のみの記載になっています)。
2につきまして、本プログラムはデーモンで常時動いており、エラーがあった場合は自分自身を再起動したらどうかと考えています。ただ、その場合、forkで失敗したのに下のような記載方法で良いのか分かりません。またfork関数で失敗するのがプログラム稼動後、約1ヵ月後のため、未だ実際の確認ができないでおります。
C
1pid_t pid; 2pid = fork(); 3if (pid < 0){ 4 //forkに失敗したら自身を再起動... 5 execl("./eco_deg", NULL); 6} 7else if (pid == 0){ 8 //外部プログラムを起動... 9 execlp("./eco_c", param1, param2); 10 exit(-1); 11} 12
拙い記載で、内容が伝わるのか甚だ不安ではおりますが、どなた様かご教授賜れましたら幸いです。
宜しくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/05 08:34