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