Я создаю образ Docker, который запускает длительный процесс Java. Я хочу убедиться, что он может быть уничтожен вместе с контейнером (например, с помощью Ctrl + C), но все же выполнить очистку.
Если я использую exec java -jar
в моей точке входа, она работает как положено.
Если я просто выполняю java -jar
, процесс не может быть остановлен.
Однако exec
завершает работу контейнера даже в случае успеха, и это проблема, если эта команда не является последней в точке входа. Например, если после преобразования или очистки файла не будет выполнено:
exec java -jar "./lib/Saxon-HE-${SAXON_VER}.jar" -s:"$json_xml" -xsl:"$STYLESHEET" base-uri="$base"
rm "$json_xml"
Я думаю, что объяснение состоит в том, что при использовании exec
процесс (java
в этом случае) становится PID = 1 и получает сигналы уничтожения, в то время как без exec
он получает какой-то другой PID и не получает сигналы и поэтому не может быть убит.
Итак, мой вопрос двоякий:
- существует ли обходной путь, позволяющий завершить процесс, не выходя из контейнера в случае успеха, как
exec
делает?
- как мне убедиться, что очистка после
exec
(rm
в этом случае) будет выполнена, даже если процесс будет завершен / завершен?