2010-11-04 3 views
0

Если я запустил скрипт ruby ​​из терминала и запустил какой-то другой процесс с использованием system, и нажмите Ctrl + C, чтобы INT передал другой процесс, как я могу заставить рубиновый процесс обрабатывать его и другой процесс не получить его вообще?Запуск сигналов блокировки процесса с терминала

Пример:

trap('INT'){ puts 'Wait a bit' } 
system 'sleep 100' 

Если я нажимаю Ctrl + C этот скрипт немедленно закроется, и ничего не будет печатать: INT будет отправлен только спать, поэтому он будет выйти и сценарий будет завершен.

ответ

0

Возможно, речь идет о разветвлении, а не использовании системы. Может помочь раздел в Independent Children в программировании Ruby.

Или вы можете говорить о том, что ребенок полностью изолирован от родителя как автономное приложение, так что, если родительский выход завершает работу дочернего элемента, например, серверы httpd и т. П. Я не пробовал, но Daemons звучит так, будто все будет хорошо.

0

Вы можете поймать ловушку INT и выехать, используя trap("INT") { exit }. Как и Грег, не уверен, что это то, что вы хотели, но это может быть что-то, что нужно посмотреть.

+0

Я добавил пример – tig