Как стать автором
Поиск
Написать публикацию
Обновить

Мини-wrapper для Java приложений под *nix

Время на прочтение1 мин
Количество просмотров742
Доброго всем времени суток.

Проблема: При запуске большого числа различных фоновых Java приложений возникает проблема их идентификации при использовании ps/top, т.к. в результате имеем большое количество процессов с именем «java», что не есть удобным.

Есть несколько вариантов решения проблемы:
  1. Написание JNI wrapper
  2. Собственное решение

Я решил данную проблему следующим образом

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».
Теги:
Хабы:
Всего голосов 10: ↑9 и ↓1+8
Комментарии10

Публикации

Ближайшие события