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

Mukai Takanori email@hidden
2013年 3月 19日 (火) 18:00:22 JST


中山様

向井です。

頂いたご回答に対する当方の認識が間違えているのか、まだ解決しません。

> 親プロセスからkillされているのでしょうか?
→ ここで言われている親プロセスとは、pppdを呼び出したプロセスの事でしょうか。 

    その場合は親プロセスがpppdをkillしております。

> その場合はkill()直後にwaitpid()を呼び出し、
> (-1ではなく)pppdのPIDを指定して回収できます。
→ kill( pppdのPID, SIGINT ) ;
  waitpid( pppdのPID, NULL, WNOHANG ) ;
    というコードで試してみましたがだめでした。
    意図が違いましたでしょうか。

> また、向井さんの環境ですと、
> 親プロセスに直接killコマンドでSIGCHLDを送れば、
> 強制的にpppdに対してwaitできるはずです。
→ 1.pppdを呼び出したプロセスにSIGCHLDの受信ハンドラを設定
                               ・・・・
    2.kill( pppdのPID, SIGINT ) ;
  3.kill( pppdを呼び出したプロセスのPID, SIGCHLD ) ;
                               ・・・・
    4.SIGCHLDハンドラ内で
        waitpid( -1, NULL, WNOHANG ) ;

    という処理を入れてみたのですが駄目でした。
    こちらも意図が違いましたでしょうか。

以上、よろしくお願いします。

----- Original Message ----- 
From: "nakayama junichi" <email@hidden>
To: "Armadillo general discussion list" <email@hidden>
Sent: Tuesday, March 19, 2013 4:00 PM
Subject: [Armadillo:08688] Re:Armadillo-460 pppd切断時にpppdがゾンビ化する


> 向井様
>
> 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 mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>
> 




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