Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment tuer un sous-processus

6 réponses
Avatar
Gauthier
Bonjour à tous,

Je m'embrouille complètement avec les pages de manuel relative à fork,
getpid, etc.

Pourrait-on m'expliquer pas à pas comment résoudre ce problème sans
doute trivial:

Lancer à partir d'un script perl un programme qui, utilisé dans le
shell, devrait être interrompu par un Ctrl-C.
En l'occurrence, il s'agit de streamripper, qui me permet d'enregistrer
mes concerts nocturnes au format mp3 :

$SavingTime=600; # temps d'enregistrement en secondes
$STREAMRIPPER="/usr/bin/streamripper $Stream -d $SaveDir -a ";
open (STREAM, "$STREAMRIPPER |");
sleep $SavingTime;
# Faire quelque chose ici pour interrompre $STREAMRIPPER
close STREAM;

De préférence, ne pas tuer le script lui-même parce qu'il pourrait
reprendre un autre enregistrement plus tard, et ne pas tuer tous
les processus système (je veux dire ceux qu'on visualise avec ps -ax)
comprenant streamripper, puisque plusieurs enregistrements pourraient être
lancés simultanémént.

Merci d'avance,
--
^^ Gauthier
(_____/°°-ç
| \_`-"
)/@mmm||
\nn \nn FOE-Belgium : http://www.amisdelaterre.be

6 réponses

Avatar
Nicolas George
Gauthier wrote in message
:
open (STREAM, "$STREAMRIPPER |");


« Open returns nonzero upon success, the undefined value otherwise. If the
"open" involved a pipe, the return value happens to be the pid of the
subprocess. »
(perldoc perlfunc, paragraphe sur open)

Ça devrait répondre à la question.

Avatar
Jacques Caron
Salut,

On 15 Apr 2005 11:57:26 GMT, Gauthier
wrote:

Lancer à partir d'un script perl un programme qui, utilisé dans le
shell, devrait être interrompu par un Ctrl-C.
En l'occurrence, il s'agit de streamripper, qui me permet d'enregistrer
mes concerts nocturnes au format mp3 :

$SavingTime`0; # temps d'enregistrement en secondes
$STREAMRIPPER="/usr/bin/streamripper $Stream -d $SaveDir -a ";
open (STREAM, "$STREAMRIPPER |");
sleep $SavingTime;
# Faire quelque chose ici pour interrompre $STREAMRIPPER
close STREAM;


Déjà rien que le fait de fermer le pipe ça devrait inciter streamripper à
s'arrêter. Mais si ce n'est pas le cas, il devrait suffire de noter la
valeur de retour du open (qui est le pid de streamripper) et faire un kill
2,$pid.

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/

Avatar
Gauthier
Le Fri, 15 Apr 2005 14:34:35 +0200, Jacques Caron a écrit:
Salut,
Déjà rien que le fait de fermer le pipe ça devrait inciter streamripper à
s'arrêter.


Hélas, non, j'ai commencé par là.
--
^^ Gauthier
(_____/°°-ç
| _`-"
)/@mmm||
nn nn FOE-Belgium : http://www.amisdelaterre.be

Avatar
Gauthier
Le Fri, 15 Apr 2005 12:25:13 +0000 (UTC), Nicolas George <nicolas$ a écrit:
« Open returns nonzero upon success, the undefined value otherwise. If the
"open" involved a pipe, the return value happens to be the pid of the
subprocess. »
(perldoc perlfunc, paragraphe sur open)

Ça devrait répondre à la question.


Non, justement, j'essaie ceci :

if (open (STREAM, "$STREAMRIPPER |")) {
$pid = $?;
print "STREAM: ouvert avec pid $?n";
}

Et le script me renvoie

STREAM: ouvert avec pid 0

Puis, la sortie de streamripper qui se déroule correctement, ce qui est
en contadiction avec ce que vous citez.
--
^^ Gauthier
(_____/°°-ç
| _`-"
)/@mmm||
nn nn FOE-Belgium : http://www.amisdelaterre.be

Avatar
Jacques Caron
Salut,

On 15 Apr 2005 13:38:54 GMT, Gauthier
wrote:

Le Fri, 15 Apr 2005 12:25:13 +0000 (UTC), Nicolas George
<nicolas$ a écrit:
« Open returns nonzero upon success, the undefined value otherwise. If
the "open" involved a pipe, the return value happens to be the pid of
the
subprocess. »
(perldoc perlfunc, paragraphe sur open)

Ça devrait répondre à la question.


Non, justement, j'essaie ceci :

if (open (STREAM, "$STREAMRIPPER |")) {
$pid = $?;
print "STREAM: ouvert avec pid $?n";
}


Je ne vois pas le rapport avec le paragraphe cité. Vous utilisez $? qui
est la valeur de sortie du dernier processus exécuté, qui ne s'applique
évidemment pas ici. Il faut faire $pid=open...

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/


Avatar
Gauthier
Le Fri, 15 Apr 2005 15:45:37 +0200, Jacques Caron a écrit:
Il faut faire $pid=open...
Jacques.


À présent, ça fonctionne, merci
--
^^ Gauthier
(_____/°°-ç
| _`-"
)/@mmm||
nn nn FOE-Belgium : http://www.amisdelaterre.be