3

我的 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。

4

2 回答 2

5

setsid创建一个新会话。

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

于 2016-05-18T14:42:29.437 回答
4

setsid命令在没有控制终端的新会话中启动您的 perl 程序。除了通过进程 ID 之外,没有其他方法可以与进程交互

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

于 2016-05-18T14:32:21.487 回答