【发布时间】:2013-12-10 18:15:51
【问题描述】:
我在 Windows 中运行调用可执行文件的 Perl 脚本:
$command = "$path_to_exe -i $dir -o $results";
my $pid = fork();
if ( !$pid ) {
system($command);
#do stuff
} else {
#do stuff
}
print "Exiting..."
exit;
perl.exe 只是闲置而不是退出。然后弹出窗口告诉我“Perl 命令行解释器已停止工作。”
我不太了解 Windows 中的进程管理,我之前在这个论坛上读到过使用 fork() 和 exec() 不是一个好习惯,但是除了解释器没有关闭部分之外,代码运行良好.从尝试在 Unix 中实现程序(给出相同的错误)到使用 Win32::Process 命令,我已经尝试了所有方法——但没有任何效果。我希望可能有一个更简单的解决方案,可以让我保留我已经写的内容。
如果有人可以解释运行此代码时 Windows 中究竟发生了什么,那也将是一个帮助!
【问题讨论】:
-
fork-exec 不是 win 的好习惯,因为 win 没有针对它进行优化。 Win 是对海量线程和本地 rpc 进行了优化。但在您的情况下,这不是一个真正的问题,因为对您而言,您的包装脚本 0.001s 或 0.01s 开销产生的并不重要。如果您有例如数据库服务器守护程序或每秒必须调用数千次的东西,那么这很重要。另一件事,是的, fork()-exec() 很慢,但是 fork()-system() 甚至很慢...我看得更远,您根本没有对我的第二个问题做出反应($pid 和不是 $$)。你应该合作。
标签: windows perl winapi freeze