2015-03-02 6 views
1

Я написал сценарий оболочки A, в котором он вызывает другой скрипт B. Что такое B - это запуск некоторых вычислений и создание текстового файла.завершение работы программы в скрипте вызывающей оболочки

Я не являюсь владельцем кода B, и A должен называть его на переднем плане по нетехническим причинам.

Для вычисления и создания текста требуется не более 1 минуты для B, но B не закончится и не вернет управление A до 6 минут.

Теперь пользователь пожаловался, почему он занимает 7 минут, чтобы запустить скрипт A.

Поэтому мой вопрос, как я могу переписать сразу обнаружить файл создается и таким образом прекратить B, чтобы вернуть себе контроль? если A все еще должен запустить B на переднем плане? это выполнимо?

Надеюсь, я поняла.

спасибо! Джон

ответ

2

Этот сценарий вызывает в фоновом режиме функция, которая проверяет, существует ли файл, а затем с помощью exec запустить сценарий с тем же PID оригинального сценария (например, PID получается с $$), когда создается файл умерщвление отправляется на этот pid, а затем уничтожается сценарий exec:

#!/bin/bash 
function checkAndKill { 
    local pid=$1 
    local filename=$2 
    while [ ! -e $filename ]; do 
     sleep 1 
    done 
    kill $pid 
} 

checkAndKill $$ /path/of/the/file/to/check & 

exec B.sh