【发布时间】:2011-03-15 22:27:05
【问题描述】:
这里发生了什么?我以为 SIGINT 会被发送到前台进程组。
(我想,也许那个 system() 正在运行一个 shell,它正在为子进程创建一个新的进程组?谁能证实这一点?)
% perl
local $SIG{INT} = sub { print "caught signal\n"; };
system('sleep', '10');
然后立即按 ctrl+d 然后按 ctrl+c 并注意从未打印过“caught signal”。
我觉得这是一件简单的事情......无论如何要解决这个问题?问题是,当通过系统运行一堆命令时,会导致按住 ctrl+c 直到所有迭代完成(因为 perl 永远不会得到 SIGINT)并且相当烦人......
如何解决这个问题? (我已经直接使用 fork() 进行了测试,并且知道这是可行的......目前这不是一个可接受的解决方案)
更新:请注意,这与“睡眠”无关,只是该命令需要一些任意长的时间来运行这一事实,这是相当大的比它周围的 perl 还多。如此之多以至于按 ctrl+c 被发送到命令(因为它在前台进程组中?)并且以某种方式设法永远不会被发送到 perl。
【问题讨论】:
标签: linux perl process signals