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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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)
Fabien <beuhfa@yahoo.fr> é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)
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)