Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mknmz: user-friendly progress messaging



古川です。

これも、だいぶ前の話ですが…

From: Satoru Takabayashi <satoru-t@xxxxxxxxxxxxxxxxxx>
Subject: [namazu-dev 1667] Re: mknmz: user-friendly progress messaging
Date: Sat, 19 Feb 2000 13:00:12 +0900

satoru-t> Rei FURUKAWA <furukawa@xxxxxxxxxxxxxxxx> wrote:
satoru-t> >(2) HUP を受けたら、次のファイルのタイミングで exec し直す
satoru-t> >top などで監視していて「危い!」と思ったら、kill -HUP pid する、という使
satoru-t> >いかたができます。
satoru-t> 
satoru-t> 処理がややこしくなりそうなので、2.0 の公開後にします。SIGHUP 
satoru-t> を受け取ったときの処理は次のようになるでしょうか。
satoru-t> 
satoru-t>   * 次のファイルのタイミングで exec し直す
satoru-t>     - 急遽 --checkpoint モードに切り替わる
satoru-t> 
satoru-t>   * 適切なメッセージを表示する
satoru-t>     - その時点での $processed_files_size など
satoru-t> 
satoru-t>   * $conf::ON_MEMORY_MAX を減らす
satoru-t>     - その時点での $processed_files_size にする?

これについて、「mknmz 側に最低限、本当に必要な機能は何か」と考えてみると、

    TERM シグナルを受けたら、現在処理中のファイルが終わった時点で終了処理
    に移る。

これさえあれば、あとは、外部ツールなどでも、なんとかなると思います。

# 途中で終わりたくなったら、kill -TERM pid すれば、今までの作業を無駄に
# せずに、安全に終了できるようになります。

私としては、ぜひ導入したいのですが、いかがでしょう?

-- 
Rei FURUKAWA 
furukawa@xxxxxxxxxxxx


--- mknmz.in.orig	Wed Apr 26 11:30:51 2000
+++ mknmz.in	Sun May  7 08:19:33 2000
@@ -65,6 +65,7 @@
 my @LoadedRcfiles = ();
 my $Magic = new File::MMagic;
 
+my $ReceiveTERM = 0;
 
 STDOUT->autoflush(1);
 STDERR->autoflush(1);
@@ -125,6 +126,7 @@
 
 	    $total_files_size     += $cfile_size;
 	    $processed_files_size += $cfile_size;
+	    last if $ReceiveTERM;
 	    if ($processed_files_size > $conf::ON_MEMORY_MAX) {
 		if (%KeyIndex) {
 		    $key_count = write_index();
@@ -320,6 +322,11 @@
 
     $SIG{'INT'}  = sub {
 	util::cdie("SIGINT caught! Aborted.\n");
+    };
+
+    $SIG{'TERM'}  = sub {
+	print STDERR "SIGTERM caught!\n";
+	$ReceiveTERM = 1;
     };
 
     # For executing mknmz in scripts directory