[Armadillo:08088] Re: login ・exit を繰り返すとexitに時間が掛かる

Yasuhisa Nakamura email@hidden
2012年 6月 13日 (水) 00:56:13 JST


中村です。
#質問者さんも「中村さん」なようなので紛らわしいですが・・・

これは、initプロセスによるrespawnコマンドの連続再起動制限に
よるものですね。

何秒間の間に何回連続起動されたら・・・という定数は
実装によって異なると思いますが、Armadilloに限らず、
UNIX/Linux系のinitにはみな入っている機能です。

http://manual.atmark-techno.com/armadillo-guide/armadillo-guide-2_ja-2.1.0/ch08.html#sec_execute_commands_automatically_by_the_inittab
の「respawnアクションの実行間隔」に説明があります。

Armadilloで使われているinitはbusyboxです。
busyboxのinitでこの部分がどのような実装になっているか?、
というと、

busybox/init/init.c
....
#define TESTTIME  90    /* Threshold for detecting "fast" spawning processes */
#define MAXSPAWN  5     /* Number of rapid respawns that counts as too fast */
#define SLEEPTIME 300   /* Fast spawn hold off period */
#define DELAYTIME 5     /* Time between successive runs of a process */
....
       now = time(NULL);
       if (a->lastrun + TESTTIME > now)
           a->runcount++;
       else
           a->runcount = 0;
       if (a->runcount >= MAXSPAWN) {
           a->runcount = MAXSPAWN-1;
           a->nextrun = now + SLEEPTIME;
           message(LOG, "Process '%s' (pid %d) is respawning "
                   "too fast.\n", a->command, wpid);
       } else {
....

というコードがありました。

このコードによれば、その現象が発生したときにsyslogに
"Process xxxxxxxx (pid xxx) is respawning too fast."
というログが残っていると思います。

検査する時間や回数など、ソース埋め込みの値を使っていますので、
回避するためには、ソースコードを修正する以外にはないでしょう。

-- 
なかむら


2012年 6月 12日(火)21:14 に 中村 浩 さんは書きました:
> Armadillo-420、Linux(atmark-dist v1.28.1 (AtmarkTechno/Armadillo-420)
> Linux 2.6.26-at15 [armv5tejl arch])で開発を行っております。
>
> Armadillo-420にシリアルコンソールを接続してlogin・exit を繰り返すと、
>  4・5回目より、exit してから login を表示するまで約5分掛かります。
>  exit・login を繰り返している間は5分掛かりますが、10分程度放置すると
>  exit してから login を表示するまで10秒程度になります。また、exit・login 
>  を繰り返すと、5分かかる状態が再現します。
>  
>  exit してから login を表示するまで約5分掛かる状態を回避する方策を
>  ご教授ねがいます。
>
>  プログラムを起動していることも無く、単純に login(rootユーザ) して
>  exit をくりかえすのみです。
>




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