Perl命令行解释器没有退出

use*_*er0 5 windows perl winapi hang

我在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;
Run Code Online (Sandbox Code Playgroud)

而不是退出之后,perl.exe只是空闲.然后弹出窗口告诉我"Perl命令行解释器已停止工作".

我不知道很多有关Windows进程管理,我已经在这个论坛之前读取它的使用不是好的做法fork()exec(),但代码工作得很好,除了解释不打烊的一部分.我已经尝试了从尝试在Unix中实现程序(它提供相同的错误)到使用Win32::Process命令的一切 - 但没有任何作用.我希望可能有一个更简单的解决方案,可以让我保留我已经写过的内容.

如果有人能够在运行此代码时解释Windows中究竟发生了什么,那也将是一个帮助!

pet*_*ica 4

我可以看到两个独立的问题。

  1. system()创建一个子进程,因此如果您system()从派生的子进程中调用 a,您将拥有 3 个进程。但是你只杀死了第二个(分叉的孩子),而不是孩子的孩子($命令)。尝试使用类似的函数exec(),在unix上它会在实际进程的位置(以及pid)上启动子进程。如果运气好的话,Windows 上的 Perl 也可以做同样的事情。

  2. 在父线程中$$,您杀死当前进程。也许您想杀死$pid(这是父线程上子进程的 pid)。