hotspot/src/os/linux/vm/attachListener_linux.cpp
// If the file .attach_pid<pid> exists in the working directory
// or /tmp then this is the trigger to start the attach mechanism
bool AttachListener::is_init_trigger() {
{- -------------------------------------------
(1) もし既に起動済みであれば, 何もすることはないので, ここでリターン.
---------------------------------------- -}
if (init_at_startup() || is_initialized()) {
return false; // initialized at startup or already initialized
}
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
char fn[PATH_MAX+1];
sprintf(fn, ".attach_pid%d", os::current_process_id());
int ret;
struct stat64 st;
{- -------------------------------------------
(1) カレントディレクトリに ".attach_pid${pid}" というファイルが存在しているかどうかを調べる.
もしなければ /tmp 以下に存在しているかどうかを調べる.
---------------------------------------- -}
RESTARTABLE(::stat64(fn, &st), ret);
if (ret == -1) {
snprintf(fn, sizeof(fn), "%s/.attach_pid%d",
os::get_temp_directory(), os::current_process_id());
RESTARTABLE(::stat64(fn, &st), ret);
}
{- -------------------------------------------
(1) 上記ファイルがどちらかの場所に存在しており, かつ
そのファイルがこの HotSpot プロセスの実行ユーザーのものであれば (<= これは念のため),
AttachListener::init() を呼んで AttachListener スレッドを起動させる.
その後, true をリターン.
逆に, 上記の条件が成り立っていなければ, 単に false をリターンするだけ.
---------------------------------------- -}
if (ret == 0) {
// simple check to avoid starting the attach mechanism when
// a bogus user creates the file
if (st.st_uid == geteuid()) {
init();
return true;
}
}
return false;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.