Je dois déterminer l'ID de session du processus en cours et le responsable de la session. Je vois que le module POSIX implémente "setsid" mais pas " getsid ". Existe-t-il un moyen de récupérer ces informations en Perl?

Merci!

0
quicoju 20 nov. 2018 à 17:59

3 réponses

Meilleure réponse

Essayez la fonction syscall intégrée

require 'syscall.ph';
$sid = syscall(SYS_getsid, $process_id);
2
mob 20 nov. 2018 à 15:19

Il y a un getsid dans POSIX :: 2008:

getsid

sid = getsid (pid);

pid vaut 0 par défaut.

2
melpomene 20 nov. 2018 à 15:27

Vous pouvez utiliser FFI :: Platypus pour créer facilement une interface Perl pour une telle fonction avec libffi . Celui-ci est agréable et simple, car il ne prend qu'un entier et renvoie un entier, mais j'aime toujours ajouter plus d'argument Perlish et de gestion des erreurs, ce que la méthode d'attachement de FFI :: Platypus permet.

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

Production:

3276
3276
3276
1
No such process at ...
2
Grinnz 20 nov. 2018 à 21:45