У меня есть этот простой Баш скрипт:Мой Bash скрипт не реагирует на сигналы при открытии новой сессии оболочки
#!/bin/bash
trap "rm /testfile; service apache2 stop;" SIGTERM
service apache2 start
# Here I want to create new bash session for some reasons.
/bin/bash
Теперь некоторые другая программа может когда-нибудь отправить SIGTERM
на этот сценарий, но на самом деле скрипт не ответьте на этот сигнал, он продолжает висит в новом сеансе bash, в том же случае, когда я использую что-то вроде sleep infinity
вместо открытия нового сеанса bash (это было просто для тестирования, потому что мне нужен этот сеанс bash).
Как я могу ответить на этот скрипт на этот SIGTERM? Не имеет значения, как будет завершена новая сессия bash, я просто хочу убедиться, что то, что я пишу в trap
, будет выполнено.
Как @Fred говорит. Вы, по сути, выполняете 'service apache2 start' перед' trap 'rm/testfile, service apache2 stop; " SIGTERM' когда-либо называется. Вы хотели бы включить 'start' в' trap'. Вероятно, лучше всего, чтобы 'trap' вызывал вспомогательный скрипт, который выполняет как' stop' ('rm'), так и' start'. (ваш второй '/ bin/bash' не помогает) –
Что вы пытаетесь достичь? Почему другой процесс не просто останавливает Apache вместо того, чтобы сигнализировать об этом скрипте, чтобы заставить этот скрипт останавливать Apache? – Fred
проверить это - http://unix.stackexchange.com/questions/146756/forward-sigterm-to-child-in-bash –