当脚本 运行 使用 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 未收到信号。
我的 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 未收到信号。