perl - Perl system() 不在 nano 服务器中等待
问题描述
我正在尝试在基于 Windows 2016 Nano Server 的 docker 容器中运行 Perl 脚本。为此,我使用的是 ActivePerl 5.24。
现在我遇到了一个有趣的问题,即 system() 调用在我的 2016 Server 主机和 2016 Nano Server 容器中的行为不同。
#!/usr/bin/perl
use strict;
use warnings;
my $status = system('perl.exe -c test.plx');
print "Return: " . $status . "\n";
print "Exit: " . ($status >> 8) . "\n";
print "Signal: " . ($status & 127) . "\n";
print "Message: $!\n";
在主机 Windows 2016 Server 上,它按预期工作:
c:\>perl test.plx
test.plx syntax OK
Return: 0
Exit: 0
Signal: 0
Message:
在我的 Docker 容器中的 Nano 服务器上,它看起来像这样:
C:\>perl test.plx
Return: 768
Exit: 3
Signal: 0
Message:
所以你可以看到输出丢失并且返回码不是0。
如果我现在按回车..
C:\>
C:\>test.plx syntax OK
所以看起来 system() 没有等待并返回 768 (无论这意味着什么)
我也尝试使用“ping -v”而不是“perl -c”,但同样的事情发生了,所以它一定是与 system() 实现相关的东西。
有谁知道为什么同一个调用在 docker 容器中的行为完全不同,以及我可以做些什么来让 system() 等待?
更新: 当我使用 microsoft/windowsservercore 作为基础映像时,我确认它可以工作。所以这里发生的一切似乎都是 Nano Server 特有的。
解决方案
我收到了 ActiveState 支持部门对此问题的回复。
Nano 服务器不支持标准的 ActiveState 构建。Nano 缺少的组件太多。如果您对定制构建感兴趣,我可以将您与我们的销售团队联系起来,他们可以描述我们的企业级产品。
因此,如果我想坚持使用 Nano 服务器,我要么必须等到有人决定将它实施到标准构建中,要么我需要切换到不同的 Perl 发行版。
在那之前,我将使用有效的服务器核心。
推荐阅读
- c# - ToggleButton:样式不适用于 IsChecked 绑定
- algorithm - 在不使用蛮力的情况下从 21 种可能的组合中找到最佳手牌的最佳方法
- r - 如何从 ggcombine 到具有两个 y 轴的单个图?
- c# - 如何使用相同的外键检查多行并逐步更新它们
- python - 我想使用 python 对对象列表的键值进行排序
- javascript - 如何从包含两个数组的json映射数组?
- java - 转换 JAVA 流抛出 IllegalStateException: Duplicate key
- unreal-engine4 - UE4 在运行时在 PIE 中显示 Actor 组件
- python - 当您使用正在运行的 jpype JVM 重新启动 python 内核时,运行 Java 进程会发生什么?
- android - 一个元素对齐顶部和一个元素对齐中心