Обработка 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

Другие вопросы по тегам