Perl检索Unix会话ID和会话领导者

时间:2018-11-20 14:59:32

标签: perl

我需要确定当前进程的会话ID和会话负责人。我看到POSIX模块实现了"setsid",但没有实现"getsid"。有什么办法可以在Perl中获取此信息?

谢谢!

3 个答案:

答案 0 :(得分:2)

尝试使用内置的syscall函数

require 'syscall.ph';
$sid = syscall(SYS_getsid, $process_id);

答案 1 :(得分:2)

POSIX::2008中有一个getsid

  

getsid

     

sid = getsid(pid);

     

pid 默认为0。

答案 2 :(得分:2)

您可以使用FFI::Platypus来使用libffi轻松创建此类函数的Perl接口。这个很好而且很简单,因为它只需要一个整数并返回一个整数,但是我仍然喜欢添加更多Perlish参数和错误处理,这是FFI :: Platypus的attach方法允许的。

rebase

输出:

#!/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);