Как убить работающий код Fortran из сценария оболочки, который обращается к тому же коду?

Я должен использовать код FORTRAN, который имеет интерфейс «стиль меню». Я получаю доступ к коду, набирающему команду на терминале, который открывает главное меню. С этого момента и далее я набираю число и ввожу его, чтобы выбрать опцию, которая либо открывает подменю, либо выполняет команду. Чтобы выйти, мне нужно вернуться обратно в главное меню и набрать «0», чтобы завершить код и «вернуться в терминал». Например, на терминале I типа:

code_command % открывает главное меню кода FORTRAN

1 → Я выбираю вариант 1 из главного меню, которое открывает подменю;

2 → Из этого подменю 1 я выбираю другое подменю, печатая опцию 2;

7 → Внутри этого второго подменю я выбираю 7-й вариант, который выполняет требуемую задачу.

0 → Вернусь из второго подменю

0 → Вернусь из первого подменю (в главное меню).

0 → Я оставляю код и возвращаюсь к терминалу

Итак, я написал список команд, которые мне пришлось вводить, чтобы выполнить определенную задачу, и сохранил этот текст как "script.sh", чтобы заставить код выполнить этот список, я набираю:

code_command < script.sh

Наконец, он отлично выполняет все строки, кроме последней, когда он падает, поэтому мне нужно открыть другой терминал и введите:

pkill code_command

или Ctrl + Z изнутри разбившегося оконечного окна.

Есть ли способ запрограммировать Ctrl + Z в script.sh, чтобы убить работающий код до его сбоя?

0
задан 2 June 2016 в 09:59

1 ответ

Я предполагаю, что Вы используете удар, хотя это работает на sh и csh также.

Сначала: Установите ulimit ядро на ненулевой (так, чтобы можно было создать дамп ядра). man bash и поиск ulimit. ulimit -c <max size of core dump>. Значение по умолчанию удара не является НИКАКИМ дампом ядра, и оно должно быть повторно введено каждый раз, когда новое окно открыто, или новая сессия запускается.

1111-секундный: Запустите свою программу и в другом окне kill -3 <pid>, чтобы видеть, работают ли программы все еще и и получите дамп ядра. См. man 7 signal и "SIGQUIT" или "-3" опция.

Треть. Используйте gdb для наблюдения оператора, который вызвал проблему. Необходимо будет скомпилировать использование программы с "-g" опцией. gdb <fortran executable name> core. gdb может использоваться для отладки в интерактивном режиме. (И путь вне вопроса, который Вы задали).

Из того, что Вы упомянули в своем вопросе, Вы не обрабатываете EOF правильно для "< вход" или stdin и не выходят из цикла команды и остановки. Или Вы находитесь в бесконечном цикле или ожидающий входа в подменю. kill -3 <pid> наконец уничтожает процесс ТОЧНО, где он подвешивается.

Ctrl + z приостанавливает под управлением программу Фортрана. Исполняемый файл все еще работает, когда он зависает. При вводе команды fg для переднего плана программа Фортрана продолжилась бы от того, где это было перед Ctrl + z .

0
ответ дан 2 June 2016 в 09:59

Другие вопросы по тегам:

Похожие вопросы: