我正在编写一个程序,它使用 ZeroMQ 与同一台机器上的其他正在运行的程序进行通信。我想在运行时选择一个端口号以避免发生冲突的可能性。这是我为完成此操作而编写的一段代码示例。
#!/usr/bin/perl -Tw
use strict;
use warnings;
my %in_use;
{
local $ENV{PATH} = '/bin:/usr/bin';
%in_use = map { $_ => 1 } split /\n/, qx(
netstat -aunt |\
awk '{print \$4}' |\
grep : |\
awk -F: '{print \$NF}'
);
}
my ($port) = grep { not $in_use{$_} } 50_000 .. 59_999;
print "$port is available\n";
程序是:
调用 netstat -aunt
解析结果
选择固定范围内的第一个端口,该端口未出现在 netstat 列表中。
是否有更适合完成此任务的系统实用程序?