【发布时间】:2014-09-15 21:46:21
【问题描述】:
我对 Perl 还很陌生,所以请多多包涵。我想在 Perl 脚本退出时启动一个 c# 程序。这可能吗?如果我只是进行调用(比如对一些任意的其他 Perl 脚本),父进程将不会退出,直到子进程死亡。有什么办法可以在 Perl 中打破这种关系?我考虑过只写入文件,但这需要我始终在后台运行监控服务,这并不理想。
我尝试过 system() 但没有成功。这是我的代码中的一个 sn-p:
主脚本:
...
print "primary call starting\n";
system('reboot.pl');
$count++;
sleep(1);
print "primary call ending\n";
...
辅助脚本(reboot.pl):
...
print "reboot starting\n";
system('timeout 10');
my $iboot_urlcall = $ua->request($iboot_off);
system('timeout 10');
my $iboot_urlcall = $ua->request($iboot_on);
system('timeout 10');
print "reboot ending\n";
...
运行这个的标准输出结果是:
primary call starting
reboot starting
timeout
timeout
timeout
reboot ending
primary call ending
...
我想要的输出会更像....
primary call starting
reboot starting
primary call ending
timeout
timeout
timeout
reboot ending
...
这可能吗?
【问题讨论】:
-
你是如何启动 Perl 脚本的?
-
一个硬件正在对 cgi 脚本进行 url 调用。我通常也会按照这条路线启动附加脚本,但是我无法更改硬件上的固件(我可以,这只是一个限制)。
-
在 Linux/Unix 系统上,您可以使用内置的
exec将当前程序(在本例中为perl解释器)替换为给定的程序。perldoc -f exec -
我相信当前程序仍然被阻止。我可能是错的..
-
当 CGI 脚本退出时,我的硬件实际上只是在等待“HTTP/1.1 200 OK”消息。有什么好办法让我在退出前伪造这条消息吗?