2015-06-09 2 views
2

У меня есть launch.sh скрипт, который я представить на кластере сЭкспедиторские сигналы в Баш скрипт, который представлен на кластере

bsub $settings < launch.sh 

Этот launch.sh Баш скрипт выглядит упрощена следующим образом:

function trap_with_arg() { 
    func="$1" ; shift 
    for sig ; do 
     echo "$ES Installing trap for signal $sig" 
     trap "$func $sig" "$sig" 
    done 
} 
function signalHandler() { 
    # do stuff depending in what stage the script is 
} 

# Setup the Trap 
trap_with_arg signalHandler SIGINT SIGTERM SIGUSR1 SIGUSR2 

./start.sh 
mpirun process.sh 
./end.sh 

Где process.sh вызывает два двоичных файла (в качестве примера) как

./binaryA 
./binaryB 

Мой вопрос: Кластер уже отправляет SIGUSR1 (прибл. 10 минут до SIGTERM) к процессу (я думаю, что это оболочка bash с моим сценарием launch.sh).

В данный момент я улавлю этот сигнал в сценарии launch.sh и вызываю некоторый обработчик сигнала. Проблема заключается в том, этот обработчик сигнала только запускается на выполнение (по крайней мере то, что я знаю), после того, как работает команда закончена (например, это может быть mpirun process.sh или ./start.sh)

Как я могу передать эти сигналы, чтобы сделать выход команд/двоичные файлы корректно , Например, пересылка, например, process.sh (mpirun), как я уже испытал, уже передал полученные сигналы (как это делается?) Каков правильный способ пересылки сигналов (например, также в двоичные файлы binaryA, binaryB? У меня нет действительно хороших ключ, как это сделать создание команды выполняются в фоновом режиме, создавая дочерний процесс

Спасибо за некоторое просветление :-)

ответ

0

Из Баш инструкции по http://www.gnu.org/software/bash/manual/html_node/Signals.html:?

Если Bash ждет для команда для завершения и приема сигнала для wh ich была установлена ​​ловушка, ловушка не будет выполняться до тех пор, пока команда не завершится. Когда Bash ожидает асинхронную команду через встроенный wait, прием сигнала, для которого установлен ловушка, приведет к тому, что wait builtin немедленно вернется с статусом выхода более 128, сразу после которого будет запущена ловушка.

Таким образом, решение, кажется, чтобы поместить команды в фоновом режиме и использовать «ждать»:

something & 
wait 
Смежные вопросы