OVH Cloud OVH Cloud

question concernant POSIX

1 réponse
Avatar
beuhfa
Bonjour,

Je suis plutôt débutant en Perl et j'ai une question concernant POSIX.

Ce que souhaite faire c'est supprimer des groupes de process après une
timeout. J'ai utilisé la
commande kill 'INT', -$$ mais le pb c'est qu'elle supprime les process
du même groupe que le
process Perl (pgid==$$). Or certain des process que je veux
sauvagement killer ont un pgid
différent de $$. Un des process du groupe $$ lance un shell avec un
pgid égal à son pid.
Donc en clair, ce que je souhaite faire, c'est envoyer SIGINT à tout
les process dont le pgid est
égale à un des pid des fils de $$...

Pour chaque pid=fils($$) faire
kill 'INT', -pid;
Fin.

Ce que j'ai fait et qui ne marche pas du tout c'est:

my $f = $$;
local $SIG{INT} = 'IGNORE';
if ( $pid = fork() ) {
sleep 1;
my $cnt = kill 'INT', -$$;
print LOG "$cnt proc have been killed\n";
waitpid ($pid, 0);
} else {
while ( (my $child = waitpid ($f, 0)) >= 0 ) {
kill 'INT', -$child;
}
}



J'espere que je me suis fait à peu près comprendre ;D


Merci,
Fab.

1 réponse

Avatar
Laurent Wacrenier
Fabien écrit:
commande kill 'INT', -$$ mais le pb c'est qu'elle supprime les process
du même groupe que le
process Perl (pgid==$$). Or certain des process que je veux
sauvagement killer ont un pgid
différent de $$. Un des process du groupe $$ lance un shell avec un
pgid égal à son pid.
Donc en clair, ce que je souhaite faire, c'est envoyer SIGINT à tout
les process dont le pgid est
égale à un des pid des fils de $$...


Tu mélanges les groupes et les fils.
Pour créer un groupe il faut lancer setsid() (dans use POSIX)