当脚本 运行 使用 setsid 时在 perl 中处理 ctrl + c

Handling ctrl + c in perl when script ran using 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.

setsid 命令在没有控制终端的新会话中启动您的 perl 程序。除了通过进程 ID

之外,没有办法与进程交互

这几乎就是 setsid 首先的重点。如果您想保留对程序的控制权,那么您应该 运行 它没有 setsid

setsid 创建一个新会话。

SIGINT 信号被发送到与 tty 关联的会话的前台进程组。由于进程 A.pl 现在处于不同的会话中,实际上处于不同的进程组中,因此 A.pl 未收到信号。