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

perl中创建多进程

发布时间:2020-12-15 23:39:05 所属栏目:大数据 来源:网络整理
导读:本次项目中为了提高软件的运行效率,需要对pptx文件进行异步解压,通过运行发现Windows下多进程执行异常(调用fork函数创建子进程), 调用exe执行奔溃。其他非Windows平台好像没有这个问题。 解决方法: 在Windows下可以使用Win32::Process模块创建子进程,

本次项目中为了提高软件的运行效率,需要对pptx文件进行异步解压,通过运行发现Windows下多进程执行异常(调用fork函数创建子进程), 调用exe执行奔溃。其他非Windows平台好像没有这个问题。

解决方法:

在Windows下可以使用Win32::Process模块创建子进程,进行异步调用。

process模块API函数列表:

  • 创建进程对象
    Create($Obj,$AppName,$CommandLine,$Inherit,$CreateFlags,$InitialDir);

  • 获取进程退出代码
    $Obj->GetExitCode($ExitCode);

  • 获得进程优先级类
    $Obj->GetPriorityClass($Class);

  • 获得进程优先级类
    $ProcessObj->GetProcessID();

  • 使用退出代码撤销进程
    $Obj->Kill($ExitCode);

  • 恢复挂起的进程
    $Obj->Resume();

  • 设置进程优先级掩码(NT)
    $Obj->SetPriorityClass($Class);

  • 挂起进程
    $Obj->Suspend();

  • 等待进程执行完毕
    $Obj->wait($Timeout);

核心代码:

use Win32::Process;
use Win32;

sub ErrorReport{
  print Win32::FormatMessage( Win32::GetLastError());
}

#创建新的进程
#第一个参数$ProcessObj是进程对象容器,其后的参数包括应用程序的全路径、命令行参数和必需标志位。
#若Create最后一个参数不是当前目录,则这个目录必须先创建,否则创建进程失败。
Win32::Process::Create($ProcessObj,"C://windows//xxxx.exe","xxxx cmdlines_args",0,NORMAL_PRIORITY_CLASS,".") || die ErrorReport();

print "Notepad has started/n";
print "The exit code is:",$ProcessObj->GetExitCode($ExitCode),"/n";

其他方法:

在Win32系统上,读者也可以像在UNIX系统上一样使用system函数、exec函数和反引号、start命令。 《》Windows和UNIX都使用system函数启动操作系统命令。system负责执行程序,并在程序完成之前不返回。如果将Windows start命令作为参数提供给Perl的system函数,便会运行新的应用程序,同时脚本仍将继续执行。

示例代码:

#Perl的system函数启动新的进程。通过使用Win32 start命令,可以启动新的进程。
#与此同时,Perl脚本还将继续运行,而不是等待新进程执行完毕。如果进程启动成功,system函数将返回0。
$return_value = system ("start /Program Files/Netscape/Communicator/Program/netscape.exe");

print "Program continues; Netscape is running./n";
#打印system函数的返回值。
print "The return_value from system is $return_value./n";

(Output)
Program continues; Netscape is running.
The return_value from system is 0.

参考资料: http://www.voidcn.com/article/p-ktpyjpmm-bhm.html

(编辑:李大同)

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

    推荐文章
      热点阅读