加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – Perl命令行解释器没有退出

发布时间:2020-12-14 01:56:51 所属栏目:Windows 来源:网络整理
导读:我在 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只是空闲.然后弹出
我在 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中究竟发生了什么,那也将是一个帮助!

解决方法

我可以看到2个独立的问题.

> system()创建子进程,因此如果从分叉子进程调用system(),则将有3个进程.但是你只杀掉第二个(分叉的孩子),而孩子的孩子($命令)却没有.尝试使用像exec()这样的函数,在unix上它启动实际进程的地方(和pid)上的子进程.如果你运气好,Windows上的Perl会做同样的事情.>在父线程中杀死$$,这是当前进程.可能你想杀死$pid(这是父线程上子进程的pid).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读