有没有办法让屏幕在创建新窗口时回显会话ID?
我正在使用perl中的脚本,我需要屏幕将会话ID或PID返回给我,所以我将其记录在数组或哈希中。
答案 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
。