【问题标题】:Win32:Process SetProcessAffinityMask crashes my PerlWin32:Process SetProcessAffinityMask 使我的 Perl 崩溃
【发布时间】:2010-12-14 21:14:45
【问题描述】:

我有一个运行的 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:Create 并使用 Win32::Process:setAffinityMask

【问题讨论】:

  • 您有机会为我们链接到这些线程吗?我会说答案是“重新安装或重新编译 Perl”.. :)
  • 如何在 Perl 中生成新进程?您使用fork() 还是使用Win32::Process::Create 之类的东西?
  • (我已合并帐户并将后续问题编辑到问题中;您应该再次成为问题所有者)

标签: perl winapi


【解决方案1】:

sample code(这是别人的代码,对吗?)很垃圾——将硬编码的进程 ID 传递给 Win32::Process::Open 几乎肯定会失败。你是如何使用Win32::Process的方法的?

还有Win32::Process 的文档注释:

$ProcessObj->SetProcessAffinityMask($processAffinityMask) 设置进程关联掩码。 仅适用于 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 2011-02-13
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    相关资源
    最近更新 更多