trap
Пытаюсь с trap разобраться.
Вот такой простейший скрипт:
trap 'echo sig' SIGCHLD
echo test
Казалось бы должно быть следующее. Первая строчка устанавливает обработчик
прерывания SIGCHLD. Вторая строчка порождает потомка печатающего test.
После завершения потомка должно пройти прерывание SIGCHLD и должен
сработать обработчик прерывания который напечатает sig. Т.е. результатом
этого скрипта должна быть печать двух строк:
test
sig
А печатается только
test
В чем ошибка? Предполагал что дело в том, что echo выполняется без
порождения процесса (самим bash), проверил - нет, если вместо
echo test подставить исполнение другого скрипта тоже sig на экране не
появляется.
-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписаться: http://subscribe.ru/member/unsub?grp=comp.soft.linux.discuss&email=
http://subscribe.ru/ mailto:ask@subscribe.ru
может это поможет?
цитата из ПРОГРАММИРОВАНИЕ НА shell (UNIX), А. Соловьев
5.8. Обработка прерываний ("trap")
Бывает необходимо защитить выполнение программы от
прерывания.
Наиболее часто приходится встречаться со следующими
прерываниями, соответсвующими сигналам:
0 - выход из интерпретатора,
1 - отбой (отключение удаленного абонента),
2 - прерывание от <Del>,
9 - уничтожение (не перехватывается),
15 - окончание выполнения.
Для защиты от прерываний существует команда "trap", имеющая
формат:
trap 'список команд' сигналы
Если в системе возникнут прерывания, чьи сигналы перечислены
через пробел в "сигналы", то будет выполнен "список команд",
после чего (если в списке команд не была выполнена команда
"exit") управление вернется в точку прерывания и продолжится
выполнение командного файла.
Например, если перед прекращением по прерываниям выполнения
какого то командного файла необходимо удалить файлы в "/tmp", то
это может быть выполнено командой "trap":
tarp 'rm /tmp/* ; exit 1' 1 2 15
которая предществует прочим командам файла. Здесь, после
удаления файлов будет осуществлен выход "exit" из командного
файла.
Команда "trap" позволяет и просто игнорировать прерывания,
если "список команд" пустой. Так например, если команда "cmd"
выполняется очень долго, а пользователь решил отключиться от
системы, то для продолжения выполнения этой команды можно
написать, запустив команду в фоновом режиме:
( trap '' 1; cmd )&
C уважением, Kolotov Alexandr aka mr. Эбола
отвечать: myscri***@e*****.ru
ICQ: 100349254
| Registered Linux user # 236664 |
-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписаться: http://subscribe.ru/member/unsub?grp=comp.soft.linux.discuss&email=
http://subscribe.ru/ mailto:ask@subscribe.ru