有没有办法让 screen 返回会话 id 或 pid?

发布于 2024-12-25 12:49:50 字数 98 浏览 1 评论 0原文

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

我正在 perl 中编写脚本,我需要 screen 将会话 id 或 PID 返回给我,因此我将其记录在数组或散列中。

Is there a way to get screen to echo back the session id when it creates a new window?

I am working on script in perl and I need screen to return the session id or the PID to me so I record it in an array or a hash.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

山田美奈子 2025-01-01 12:49:50

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

由于您使用的是 screen -dmS 您可以执行以下操作:

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;
  }
};

What is your purpose for gathering these pids? It can be a little tricky in perl. Something like Unix::PID might help ( http://metacpan.org/pod/Unix::PID ) but I have the suspicion that your question does not address the actual problem you are trying to solve.

Since you are using screen -dmS <somename> you can do this:

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;
  }
};
还不是爱你 2025-01-01 12:49:50

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

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

29379.ttys000.hostname

其中第一个字段是 PID。

外部 屏幕,您可以运行:

screen -list

来获取所有会话的列表。

如果做不到这一点,就不清楚您如何从脚本中实际启动 screen ,但如果您使用标准 fork / exec 模型,则子 PID 在调用后可用fork 将是所需的 PID。有关如何分叉子程序并与其交互的更多详细信息,请参阅 man perlipc。

Check for the environment variable $ENV{'STY'} within any programs running inside screen.

On my MacOS X 10.6 system at least, it contains the session ID, e.g.:

29379.ttys000.hostname

and where the first field is the PID.

From outside screen, you can run:

screen -list

to get a list of all of your sessions.

Failing that, it's unclear how you're actually starting screen from within your script, but if you use a standard fork / exec model then the child PID available after the call to fork will be the required PID. See man perlipc for more details on how to fork a child program and interact with it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文