我运行的Perl脚本就像一个服务,我用它做的一件事就是用它来产生其他进程。其中一些进程是可执行文件,一些是perl脚本。
有时我想在某些进程上设置处理器关联。我使用SetProcessAffinityMask来执行此操作,对于可执行文件,一切都按预期工作。对于perl脚本,这样做会导致我的Perl服务崩溃。我正在运行activestate perl 5.8.8,我已经做了一些谷歌搜索,并发现one other thread提到了类似的问题,我所看到的和该线程的共识似乎与Perl的编译方式有关。 有什么想法或建议吗?
我已经将问题确定为我正在运行的实际Perl。似乎ActiveState Perl 5.8.8与SetProcessAffinityMask()存在问题。我卸载5.8.8并安装了5.10.1,使用了完全相同的代码,一切都按预期工作。
我正在使用Win32 :: Process:创建和使用Win32 :: Process:setAffinityMask
答案 0 :(得分:0)
sample code(这是其他人的代码,对吗?)是废话 - 将硬编码的进程ID传递给Win32::Process::Open
几乎肯定会失败。你是如何使用Win32::Process
中的方法的?
Win32::Process注释的文档:
$ProcessObj->SetProcessAffinityMask($processAffinityMask) Set the process affinity mask. Only available on Windows NT.
但这可能仅仅意味着文档已过时。
use strict;
use Win32::Process;
use Win32;
my $obj;
my $pid=2216;
my $iflags;
Win32::Process::Open($obj,$pid,$iflags) or die;
my $processAffinityMask;
my $systemAffinityMask;
$obj->GetProcessAffinityMask($processAffinityMask, $systemAffinityMask) or die;
$obj->SetProcessAffinityMask($processAffinityMask) or die;