Обработка ctrl + c в perl, когда скрипт запускается с использованием setsid
Мой Perl скрипт выглядит так
A.pl
#!/usr/bin/perl
system("perl ctrlc.pl");
ctrlc.pl
sub signal_handler {
print "Niraj";
}
$SIG{INT} = \&signal_handler;
print "Enter number";
my $no1 = <>;
Когда я бегу perl A.pl
и нажмите Ctrl-C, он обнаруживает и печатает "Niraj". Но когда я бегу setsid perl A.pl
, это не обнаружение Ctrl-C.
2 ответа
Решение
setsid создает новый сеанс.
Сигнал SIGINT отправляется на переднюю группу процессов сеанса, связанного с tty. Поскольку процесс A.pl сейчас находится в другом сеансе, фактически в другой группе процессов, сигналы A.pl не принимаются.
setsid
Команда запускает вашу Perl-программу в новом сеансе без управляющего терминала. Это не оставляет способа взаимодействия с процессом, кроме как по идентификатору процесса
Это в значительной степени смысл setsid
на первом месте. Если вы хотите сохранить контроль над вашей программой, вам следует запустить ее без setsid