有没有办法让屏幕返回会话ID或pid?

时间:2012-01-09 07:04:34

标签: perl return-value gnu-screen

有没有办法让屏幕在创建新窗口时回显会话ID?

我正在使用perl中的脚本,我需要屏幕将会话ID或PID返回给我,所以我将其记录在数组或哈希中。

2 个答案:

答案 0 :(得分:1)

您收集这些pids的目的是什么?在perl中它可能有点棘手。像Unix :: PID这样的东西可能会有所帮助(http://metacpan.org/pod/Unix::PID),但我怀疑你的问题没有解决你想要解决的实际问题。

由于您使用screen -dmS <somename>,因此可以执行此操作:

my %screens;

for( $i = 0; $i < 10; $i++) {
  system("screen -dmS server$i");
}

open(my $fh, "screen -list|");
while (<$fh>){
  if (/Detached/) {
    /\s*(\d*)\.(.*?)\s/;
    my ($pid, $name) = ($1, $2);
    $screens{$name} = $pid;
  }
};

答案 1 :(得分:1)

$ENV{'STY'}内运行的任何程序中检查环境变量screen

至少在我的MacOS X 10.6系统上,它包含会话ID,例如:

29379.ttys000.hostname

并且第一个字段是PID。

外部 screen,您可以运行:

screen -list

获取所有会话的列表。

如果不这样做,目前还不清楚你是如何从脚本中实际启动screen的,但是如果你使用标准fork / exec模型,那么在调用fork之后可以使用子PID将是所需的PID。有关如何分叉子程序并与之交互的详细信息,请参阅man perlipc