Какова временная терпимость обработчиков сигналов завершения / выхода из Linux в современном linux? - PullRequest
2 голосов
/ 28 декабря 2011

Я вижу странное поведение (файл отсутствует, файл устарел) в моей java-программе, которая должна сохранять некоторую информацию при завершении работы (используя shutdownhooks), которая в свою очередь использует сигнал TERM.

очевидный обходной путь - сохранить, как только эта информация будет изменена, но из соображений производительности я бы хотел этого избежать.

Мне кажется, что значение допуска установлено смехотворно коротким и init (я думаю,это имя сторожевого процесса) фактически убивает JVM, прежде чем он может завершиться.Я не думаю, что это ошибка моего приложения, потому что я использовал testcase , где он ждал не менее 20 секунд, но все еще был прерван почти мгновенно.Вы можете увидеть это поведение при выключении и выходе из системы, а также в сетевых компонентах и ​​открытых вкладках (они не сохранятся, по крайней мере, последние версии 7.1 на Java 7).

Это то, чего я не могу избежать, инужно обойтись?

1 Ответ

0 голосов
/ 28 декабря 2011

В документации для telinit (8) говорится, что процесс init ожидает 5 секунд между отправкой сигналов SIGTERM и SIGKILL. Эту задержку можно изменить с помощью опции -t.

Та же опция -t поддерживается shutdown (8) и ретранслируется на telinit. Поэтому, если вы хотите увеличить глобальную задержку в вашей системе, вам придется отредактировать либо файл конфигурации /etc/inittab, либо вспомогательные файлы в /etc/init.d, в зависимости от вашего дистрибутива.

...