Доброго всем времени суток.
Проблема: При запуске большого числа различных фоновых Java приложений возникает проблема их идентификации при использовании ps/top, т.к. в результате имеем большое количество процессов с именем «java», что не есть удобным.
Есть несколько вариантов решения проблемы:
Я решил данную проблему следующим образом
Данный код позволяет заменить имя процесса «java» на собственное, путем передачи argv текущего процесса замещающему. При этом все аргументы будут переданы по цепочке JVM.
execv, как и остальные функции семейства exec, перезапишет образ текущего процесса, причем таким образом, что pid стартующего процесса и замещающего будут совпадать.
После запуска Java приложения через такой wrapper списке процессов наш будет выглядеть приблизительно таким образом:
# ps ax | grep my_daemon
27061 pts/3 Sl+ 0:00 ./my_daemon test
Данный вывод намного более юзабилен чем множественные «java».
Проблема: При запуске большого числа различных фоновых Java приложений возникает проблема их идентификации при использовании ps/top, т.к. в результате имеем большое количество процессов с именем «java», что не есть удобным.
Есть несколько вариантов решения проблемы:
- Написание JNI wrapper
- Собственное решение
Я решил данную проблему следующим образом
int main (int argc, char** argv) { char* java_home = getenv("JAVA_HOME"); const char* java_bin_affix = "/bin/java"; if (java_home == NULL) { printf("JAVA_HOME is not set! Exiting"); exit(1); } else { int length = strlen(java_home) + strlen(java_bin_affix) + 1; char* java_bin = (char*)malloc(length); memset(java_bin,0,length); strcat(java_bin,java_home); strcat(java_bin,java_bin_affix); execv(java_bin,argv); } }
Данный код позволяет заменить имя процесса «java» на собственное, путем передачи argv текущего процесса замещающему. При этом все аргументы будут переданы по цепочке JVM.
execv, как и остальные функции семейства exec, перезапишет образ текущего процесса, причем таким образом, что pid стартующего процесса и замещающего будут совпадать.
После запуска Java приложения через такой wrapper списке процессов наш будет выглядеть приблизительно таким образом:
# ps ax | grep my_daemon
27061 pts/3 Sl+ 0:00 ./my_daemon test
Данный вывод намного более юзабилен чем множественные «java».