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