SIGINT не захватывается после использования команды ruby ​​system () - PullRequest
1 голос
/ 02 февраля 2012

Когда я запустил код рубина ниже, нажатие Ctrl + C немедленно остановит программу

trap("INT") { exit }
while line = gets; puts line; end

Однако, когда я использую команду system () до получения, нажатие ctrl + c не будет иметь никакого эффекта, если я не нажму «Enter». Похоже, это связано с тем, что system () разветвляет дочерний процесс, и каким-то образом родитель больше не может обнаружить SIGINT. Как бы вы изменили код, чтобы ctrl + c немедленно вступил в силу для кода ниже

trap("INT") { exit }

if system("which ruby > /dev/null")
  puts "ruby is installed"
end

while line = gets; puts line; end

1 Ответ

0 голосов
/ 29 февраля 2012

Это похоже на ошибку в обработке сигналов, которая была исправлена ​​в 1.9, чтобы обойти вашу проблему, определите ловушку сигнала после системного вызова:

if system("which ruby > /dev/null")
  puts "ruby is installed"
end
trap("INT") { p 'Ciao!'; exit }
while line = gets; puts line; end

Не идеально, но это работает.

...