Perl получает идентификатор сессии Unix и лидера сессии - PullRequest
0 голосов
/ 20 ноября 2018

Мне нужно определить идентификатор сеанса текущего процесса и руководителя сеанса.Я вижу, что модуль POSIX реализует "setsid" , но не "getsid" .Есть ли способ получить эту информацию в Perl?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

В есть *1002* POSIX :: 2008 :

getsid

sid = getsid (pid);

pid по умолчанию 0.

0 голосов
/ 21 ноября 2018

Вы можете использовать FFI :: Platypus , чтобы легко создать Perl-интерфейс для такой функции с помощью libffi.Это хороший и простой, поскольку он просто берет одно целое и возвращает одно целое, но я все еще хотел бы добавить больше аргументов Perlish и обработку ошибок, что позволяет метод присоединения FFI :: Platypus.

#!/usr/bin/env perl
use strict;
use warnings;
use FFI::Platypus;
use Carp 'croak';
use feature 'say';

my $ffi = FFI::Platypus->new;
$ffi->lib(undef);

$ffi->attach(getsid => ['int'] => 'int' => sub {
  my $xsub = shift;
  my $rc = $xsub->(@_ ? $_[0] : 0);
  croak "$!" if $rc < 0;
  return $rc;
});

say getsid();
say getsid(0);
say getsid($$);
say getsid(1);
say getsid(-1);

Вывод:

3276
3276
3276
1
No such process at ...
0 голосов
/ 20 ноября 2018

Попробуйте встроенную функцию syscall

require 'syscall.ph';
$sid = syscall(SYS_getsid, $process_id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...