我有一个调用外部程序的Perl脚本。 (现在我实际上正在使用反引号,但我可以很容易地使用system
或来自cpan的东西。)有时程序失败,导致Windows创建一个对话框"(外部程序)已停止工作"与文本
Windows正在检查问题的解决方案......
很快被
取代问题导致程序无法正常工作。如果解决方案可用,Windows将关闭程序并通知您。
不幸的是,此错误消息会阻止进程死亡,导致Perl不会返回,直到用户(我!)单击"取消"或"关闭程序"。有没有办法避免这种行为?
在我的用例中,程序失败是可以接受的 - 它确实有用但严格来说不是必要的工作。但由于它需要无人值守,我无法阻止该计划的剩余工作。
答案 0 :(得分:3)
您当前的方法存在的问题是反引号&外部程序运行/挂起时system
阻止。可能的其他方法可能包括。
Win32
系列的各种模块忙于等待进程结束或单击拨号框。这可能有点过头了。exec
选项具有优点,但如果您需要处理该过程,请尝试Win32::Process
。我发现这很有用。该模块的wait
方法可以替代我的警报建议或simabque的睡眠建议,并且额外的好处是您的程序睡眠时间不会超过孩子的要求。答案 1 :(得分:0)