Есть ли способ получить экран, чтобы вернуть идентификатор сессии или pid? - PullRequest
1 голос
/ 09 января 2012

Есть ли способ заставить экран отображать идентификатор сеанса при создании нового окна?

Я работаю над сценарием на Perl, и мне нужен экран, чтобы вернуть мне идентификатор сеанса или PID, поэтому я записываю его в массив или хэш.

Ответы [ 2 ]

1 голос
/ 09 января 2012

Проверьте наличие переменной среды $ENV{'STY'} в любых программах, работающих внутри screen.

По крайней мере, в моей системе MacOS X 10.6 он содержит идентификатор сеанса, например ::

29379.ttys000.hostname

и где первое поле - PID.

С снаружи screen, вы можете запустить:

screen -list

чтобы получить список всех ваших сессий.

В противном случае неясно, как вы на самом деле запускаете screen из своего скрипта, но если вы используете стандартную модель fork / exec, тогда дочерний PID, доступный после вызова fork, будет требуемым PID. См. man perlipc для получения дополнительной информации о том, как создать дочернюю программу и взаимодействовать с ней.

1 голос
/ 09 января 2012

Какова ваша цель собрать эти пиды? Это может быть немного сложно в 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;
  }
};
...