如果我有一个脚本是另一个程序的包装器(例如,a daemonizer wrapper或a wrapper for mathematica),在封装程序中捕获信号并将它们传递给子程序有时很有用。 例如,这里的一些Perl代码来处理INT(中断)信号,因此,如果您启动包装后做CTRL-C子程序也被中断:哪些信号应该将包装脚本传递给子程序?
my $subprogram = "foo args";
my $pid = open(F, "$subprogram |") or die "Can't open pipe from $subprogram: $!";
$SIG{INT} = sub { kill('INT', $pid);
close(F);
die "Passed along INT signal and now aborting.\n"; };
print while(<F>);
close(F);
[所有可能的信号]中( http://en.wikipedia.org/wiki/Signal_(computing)一个程序可以处理,哪些应包装脚本一起传递
还有什么,一个好的包装应该做
编辑:??本来这个问题是问如何相处的所有可能的信号传递感谢我得知的最初答案不是正确的问题。
编辑:我想出了什么扔我在这里循环。 Mathematica显然脱离了其父进程。所以,我必须沿着不同的终止信号传递明确:
$SIG{INT} = sub { kill('INT', $pid); }; # pass along SIGINT (eg, ctrl-C)
$SIG{TERM} = sub { kill('TERM', $pid); }; # pass along SIGTERM (kill's default)
$SIG{QUIT} = sub { kill('QUIT', $pid); }; # pass along SIGQUIT
$SIG{ABRT} = sub { kill('ABRT', $pid); }; # pass along SIGABRT
$SIG{HUP} = sub { kill('HUP', $pid); }; # pass along SIGHUP
通常这不会是必要的,因为子进程自动获取这些信号一起传送(感谢那个让我直在这个问题的答案!)。所以现在我想知道为什么(以及如何)数学分离自己...
你试图解决一个问题,你不应该试图解决无论如何,国际海事组织。看到我更新的答案。 – 2009-02-14 15:28:48