Win32:进程SetProcessAffinityMask崩溃了我的Perl

时间:2009-11-10 02:20:10

标签: perl winapi

我运行的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

1 个答案:

答案 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;