[Armadillo:08688] Re: Armadillo-460 pppd切断時にpppdがゾンビ化する

nakayama junichi email@hidden
2013年 3月 19日 (火) 16:00:42 JST


向井様

ONICOSの中山です。

> 中山様に提案していただいた対策をいれてみたのですが、
> やはりゾンビプロセスが増え続けています。
>
> ちなみにですが、vfork()とexeclp()を使用する方法の場合、
> 親プロセス側でシグナル受信(SIGCHLD等)は入れて、
> ハンドラ内でwaitをして有りますでしょうか。

私の場合、少し特殊かもしれませんが、
親プロセスが複数(10個以上)の子プロセスを
管理するような構造になっています。
親プロセスはループしながら絶えず
waitpid(-1, &status, WNOHANG)
を呼び続けています。
SIGCHLDの受信はしていません。

子プロセスを外部から荒っぽくkill()しても
親プロセスがkillされたゾンビプロセスを
うまい具合に回収してくれます。

親プロセスからkillされているのでしょうか?
その場合はkill()直後にwaitpid()を呼び出し、
(-1ではなく)pppdのPIDを指定して回収できます。

また、向井さんの環境ですと、
親プロセスに直接killコマンドでSIGCHLDを送れば、
強制的にpppdに対してwaitできるはずです。


--------------------------------------------------
From: "Mukai Takanori" <email@hidden>
Sent: Tuesday, March 19, 2013 3:08 PM
To: "Armadillo general discussion list" <email@hidden>
Subject: [Armadillo:08687] Re:Armadillo-460 pppd切断時にpppdがゾンビ化する

> 中山様
>
> 向井です。
> ご回答ありがとうございました。
>
> 中山様に提案していただいた対策をいれてみたのですが、
> やはりゾンビプロセスが増え続けています。
>
> ちなみにですが、vfork()とexeclp()を使用する方法の場合、
> 親プロセス側でシグナル受信(SIGCHLD等)は入れて、
> ハンドラ内でwaitをして有りますでしょうか。
>
> 以上、よろしくお願いします。
>
> ----- Original Message ----- 
> From: "nakayama junichi" <email@hidden>
> To: "Armadillo general discussion list" 
> <email@hidden>
> Sent: Tuesday, March 19, 2013 11:09 AM
> Subject: [Armadillo:08682] Re:Armadillo-460 pppd切断時にpppdがゾンビ化する
>
>
>> 向井様
>>
>> ONICOSの中山と申します。
>>
>>> Armadillo-460にて、FOMA通信を行う為ppp接続しています。
>>> 動作確認用のプログラム内(別プロセスからforkされています)で、以下処理をループで繰り返しています。
>>> ============================================================
>>> 1.ppp接続(バックグラウンドでpppd起動):system()関数からpppdを起動しています。
>>
>> system()関数で別プロセスを起動するのではなく、
>> vfork()とexeclp()を使用する方法はどうでしょうか?
>> 以下のように、
>> vfolk()は引数なしで呼び出します。
>> execlp()のほうは引数をいくつか与える必要があります。
>>
>> pid = vfork();
>> if( pid == 0 )
>> {
>>    // Child process
>>    execlp("pppd", "pppd", NULL);
>>    return;
>> }
>> else
>> {
>>    // Parent process
>> }
>>
>> 440なのですが、私はこの方法でプロセス管理ができています。
>>
>>
>> --------------------------------------------------
>> From: "Mukai Takanori" <email@hidden>
>> Sent: Tuesday, March 19, 2013 10:45 AM
>> To: <email@hidden>
>> Subject: [Armadillo:08681]Armadillo-460 pppd切断時にpppdがゾンビ化する
>>
>>> お世話になります。
>>> 向井と申します。
>>>
>>> Armadillo-460にて、FOMA通信を行う為ppp接続しています。
>>> 動作確認用のプログラム内(別プロセスからforkされています)で、以下処理をループで繰り返しています。
>>> ============================================================
>>> 1.ppp接続(バックグラウンドでpppd起動):system()関数からpppdを起動しています。 ↓
>>> 2.pppセッション確立を確認。
>>>>>> 3.ppp切断:kill(pppdのpid, SIGINT) ←で切断しています。
>>> ============================================================
>>>
>>> 3.の時点でpppのセッションは切れているのですが、その後にpsコマンドでプロセスを確認すると、
>>> pppdのゾンビプロセスが増え続けてしまいます。
>>>
>>> 対策として以下を試してみましたが、ゾンビプロセスを消すことが出来ません。
>>> 1.SIGCHLDハンドラ内で waitpid( -1, NULL, WNOHANG ) を実施。
>>> 2.デーモンのシグナルを無視する。 signal( SIGCHLD, SIG_IGN )
>>> 3.kill(pppdのpid, SIGINT) を system( "kill -9 pppdのpid" ) に変更してみる。
>>>
>>> 何か別の対策法をご存じの方がおられましたら、ご教示をお願いします。
>>>
>>> 環境:
>>> カーネルバージョン:linux-2.6.26-at15
>>> pppd バージョン:2.4.2
>>>
>>> 以上、よろしくお願いします。
>>>
>>>>> ********************************
>>>>> 〒655-0894
>>>>> 神戸市垂水区川原2−2−7
>>>>>
>>>>>  株式会社サイ電子
>>>>>    向井 隆智
>>>>>
>>>>>  TEL 078-754-0738 FAX 078-754-0913
>>>>>  http://www.sai-inc.jp
>>>>> ********************************
>>>
>>
>>
>>
>>> _______________________________________________
>>> armadillo mailing list
>>> email@hidden
>>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>>
>> _______________________________________________
>> armadillo mailing list
>> email@hidden
>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>
>>
>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo 




armadillo メーリングリストの案内