mysqld
を実行する場合、つまりコマンドラインで直接呼び出す場合、シェルが閉じているかctrl-c
。
「対話式」に実行する方法はありますか。つまり、これらのいずれかが発生した場合にシャットダウンするようにしますか?
(さまざまなサーバーをすばやく起動および停止するtmuxスクリプトがあるので、開発中にこれが役立つと思います。)
あなたは試すことができます--gdb
。それがSIGINT
に応答するようになりますが、データベースが破損する可能性があるかどうかはわかりません。 --one-thread
も役立つかもしれません。
Initscriptをインストールし、標準のSudo service mysql start
を使用する場合| stop
は、合理的なオプションと見なすもののリストに含まれていません。mysqld
の独自のバージョンを、カスタムハッカーを使用してsql/mysqld.cc
の信号処理コードにコンパイルできます。一部の信号はまだ定義されていないようです。このスイッチがヒットする前に信号をマスクしている追加のコードがある可能性がありますが、おそらくコピー/貼り付けを待機しているだけです。
switch (sig) {
case SIGTERM:
case SIGQUIT:
case SIGKILL:
#ifdef EXTRA_DEBUG
sql_print_information("Got signal %d to shutdown mysqld",sig);
#endif
/* switch to the old log message processing */
logger.set_handlers(LOG_FILE, opt_slow_log ? LOG_FILE:LOG_NONE,
opt_log ? LOG_FILE:LOG_NONE);
DBUG_PRINT("info",("Got signal: %d abort_loop: %d",sig,abort_loop));
if (!abort_loop)
{
abort_loop=1; // mark abort for threads
#ifdef HAVE_PSI_THREAD_INTERFACE
/* Delete the instrumentation for the signal thread */
PSI_THREAD_CALL(delete_current_thread)();
#endif
#ifdef USE_ONE_SIGNAL_HAND
pthread_t tmp;
if (mysql_thread_create(0, /* Not instrumented */
&tmp, &connection_attrib, kill_server_thread,
(void*) &sig))
sql_print_error("Can't create thread to kill server");
#else
kill_server((void*) sig); // MIT THREAD has a alarm thread
#endif
}
break;
...
そうでなければ、いいえ。