Что здесь происходит?Я думал, что SIGINT будет отправлен в группу процессов переднего плана.
(я думаю, возможно, что system () запускает оболочку, которая создает новую группу процессов для дочернего процесса? Может кто-нибудь подтвердить это?)
% perl
local $SIG{INT} = sub { print "caught signal\n"; };
system('sleep', '10');
Затем нажмите Ctrl + D, затем Ctrl + C немедленно и заметьте, что «пойманный сигнал» никогда не печатается.
Мне кажется, что это просто ... все равно работатьвокруг этого?Проблема заключается в том, что при запуске набора команд через систему происходит удержание Ctrl + C до тех пор, пока все итерации не будут завершены (поскольку Perl никогда не получает SIGINT), и это довольно раздражает ...
Как это можно обойти?(Я уже тестировал использование fork () напрямую и понимаю, что это работает ... в настоящее время это неприемлемое решение)
ОБНОВЛЕНИЕ : обратите внимание, здесь ничего нет , что касается «сна», только того факта, что выполнение команды занимает произвольно много времени, что значительно больше, чем у perl вокруг нее.Настолько, что нажатие ctrl + c отправляется в команду (как в группе процессов переднего плана?) И каким-то образом удается ее никогда не отправлять в perl.