Я нахожусь в Windows с клубничным perl. У меня есть приложение GUI.pl, которое запускает script.pl, которые запускают some.exe. Скрипт perl работает как прокси для STDIN/OUT/ERR между приложением GUI и some.exe. Проблема в том, что я не могу убить some.exe процесс в цепочке GUI.pl -> script.pl -> some.exe.Обработчики сигналов Perl и WIndows
GUI.pl посылает TERM в script.pl
# GUI.pl
my $pid = open my $cmd, '-|', 'script.pl';
sleep 1;
kill 'TERM', $pid;
script.pl подхватить 'TERM' и пытается убить some.exe
# script.pl
$SIG{TERM} = \&handler;
my $pid = open my $cmd, '-|', 'some.exe';
sub handler {
kill 'TERM', $pid;
}
С эта схема, процесс some.exe продолжает выполняться. Я уже много узнал о сигналах, но до сих пор не понимаю, как решить эту проблему.
Благодарим заранее.
И одно из решений она является использование threads:
# script.pl
use threads;
use threads::shared;
$SIG{BREAK} = \&handler;
my $pid :shared;
async {
$pid = open my $cmd, '-|', 'some.exe'
}->detach;
# 1 second for blocking opcode. After sleep handler will be applied
sleep 1;
sub handler {
kill 'TERM', $pid;
}
Это объяснение неверно. Процесс отсрочки, зарегистрированный в Отложенных сигналах, не используется для сигналов Windows. – ikegami
Что я нашел в этом объяснении, так это то, что я не могу обрабатывать сигнал во время операции ввода-вывода. –