C初心者がmemcached-1.4.5を追いかける。(19)
C初心者がmemcached-1.4.5を追いかける。(18)の続き
ソースはコチラにてDLしました。
getoptで受け取ったパラメータによって処理を行っている部分を追いかける。
memcached.c(4369行目あたり)
case 'P': pid_file = optarg; break;
"P:" /* save PID in file */
pid_file はmainのローカル変数。
char *pid_file = NULL;
プロセス管理の為に使うファイルでしょうか。
起動時にPIDファイルを生成
memcached.c(4614行目あたり)
if (do_daemonize)
save_pid(getpid(), pid_file);
dオプションで起動した場合に、save_pidで書き込んでいます。
getpid()はプロセスIDを取得するシステムコール 404 - エラー: 404
memcached.c(4166行目あたり)
static void save_pid(const pid_t pid, const char *pid_file) { FILE *fp; if (pid_file == NULL) return; if ((fp = fopen(pid_file, "w")) == NULL) { vperror("Could not open the pid file %s for writing", pid_file); return; } fprintf(fp,"%ld\n", (long)pid); if (fclose(fp) == -1) { vperror("Could not close the pid file %s", pid_file); return; } }
終了時にPIDファイルを取り除く
mainの終わりの方でpid_file変数が使用されていました。
memcached.c(4686行目あたり)
/* remove the PID file if we're a daemon */ if (do_daemonize) remove_pidfile(pid_file);
memcached.c(4183行目あたり)
static void remove_pidfile(const char *pid_file) { if (pid_file == NULL) return; if (unlink(pid_file) != 0) { vperror("Could not remove the pid file %s", pid_file); } }
unlink(システムコール)でファイルを削除しています。 404 - エラー: 404
PIDファイルとは(apacheの解説)
memcachedなのになぜかapacheですが。あくまでほかのプログラムならということで。
実行時のプロセスID番号が分かると便利だ。Unix、Win32とも、この情報はPidFileで調べることができ、このディレクティブを設定するとPIDを格納する場所を変更できる。
・・・・
しかし、PIDを使って簡単にプロセスを停止できるのはUnixだけである。
(Apache ハンドブック 第3版 P.64ページより。)
実際memcachedではどのようにPIDを使っているのでしょうか。
プロセスをkillする場合。
試してませんが
kill -HUP `cat [Pオプションで指定したファイル]`
こんな感じでしょうか。