perl中创建多进程
2017-12-18 22:44
316 查看
本次项目中为了提高软件的运行效率,需要对pptx文件进行异步解压,通过运行发现Windows下多进程执行异常(调用fork函数创建子进程), 调用exe执行奔溃。其他非Windows平台好像没有这个问题。
解决方法:
在Windows下可以使用Win32::Process模块创建子进程,进行异步调用。
process模块API函数列表:
创建进程对象
获取进程退出代码
获得进程优先级类
获得进程优先级类
使用退出代码撤销进程
恢复挂起的进程
设置进程优先级掩码(NT)
挂起进程
等待进程执行完毕
核心代码:
其他方法:
在Win32系统上,读者也可以像在UNIX系统上一样使用system函数、exec函数和反引号、start命令。 《》Windows和UNIX都使用system函数启动操作系统命令。system负责执行程序,并在程序完成之前不返回。如果将Windows start命令作为参数提供给Perl的system函数,便会运行新的应用程序,同时脚本仍将继续执行。
示例代码:
参考资料: http://blog.csdn.net/lhy2199/article/details/5462313
解决方法:
在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://blog.csdn.net/lhy2199/article/details/5462313
相关文章推荐
- 创建多进程
- Perl多进程程序的编写
- perl 创建包
- perl 模块的创建以及制定perl 模块的路径
- perl中动态创建access数据库mdb
- python创建多进程
- perl put 创建索引2
- sqlserver数据导入mysql一: 创建mysql数据库 perl脚本
- [Perl]根据当前时间来创建文件夹
- c语言中创建多进程
- perl 创建包
- perl 创建包
- 多进程并发编程----基于高级的预先创建进程池(accept使用线程上锁)的模型
- Perl——哈希的创建和引用
- Perl多进程实例
- 【C/C++】多进程:子进程的创建fork()
- 玩转nodeJS系列:使用cluster创建nodejs单机多核集群(多进程)
- java多线程------实现Runnable接口创建多进程,实现资源共享
- Perl多进程
- python创建多进程(2)--用三个进程计算斐波那契数列