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

nakayama junichi email@hidden
2013年 3月 19日 (火) 11:09:22 JST


向井様

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 メーリングリストの案内