(bash:débutant) exécuter une commande une durée déterminée
10 réponses
alouest.du.soleil
Bonjour à tous,
Je souhaite enregistrer en mon absence mon émission radio préférée, émise en
streaming mp3. J'utilise dans un script wget qui sauvegarde le streaming en
question, mais il faut l'interrompre au terme de la durée de l'émission.
J'essaye ceci :
Mais je me dis que ça n'est pas satisfaisant, parce que l'identité du processus
repose sur la présence d'une chaîne de caractère, et que je récupère
inévitablement 2 numéros de processus parce que la commande "grep " apparaît
elle-même dans la liste renvoyée par ps :-(
Je me demandais donc
- si vous voyez une manière de résoudre le double n° de processus
- si vous voyez une meilleure manière de gérer l'interruption de cette
commande, en l'incluant dans une boucle while par exemple.
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
[Sauron De Mordor]
Gauthier wrote:
Bonjour à tous,
Je souhaite enregistrer en mon absence mon émission radio préféré e, émise en streaming mp3. J'utilise dans un script wget qui sauvegarde le streamin g en question, mais il faut l'interrompre au terme de la durée de l'émis sion. J'essaye ceci :
Mais je me dis que ça n'est pas satisfaisant, parce que l'identité du processus repose sur la présence d'une chaîne de caractère, et que je réc upère inévitablement 2 numéros de processus parce que la commande "grep " apparaît elle-même dans la liste renvoyée par ps :-(
Je me demandais donc - si vous voyez une manière de résoudre le double n° de processus - si vous voyez une meilleure manière de gérer l'interruption de ce tte commande, en l'incluant dans une boucle while par exemple.
Merci d'avance,
Gauthier wrote:
Bonjour à tous,
Je souhaite enregistrer en mon absence mon émission radio préféré e, émise en
streaming mp3. J'utilise dans un script wget qui sauvegarde le streamin g en
question, mais il faut l'interrompre au terme de la durée de l'émis sion.
J'essaye ceci :
Mais je me dis que ça n'est pas satisfaisant, parce que l'identité du processus
repose sur la présence d'une chaîne de caractère, et que je réc upère
inévitablement 2 numéros de processus parce que la commande "grep " apparaît
elle-même dans la liste renvoyée par ps :-(
Je me demandais donc
- si vous voyez une manière de résoudre le double n° de processus
- si vous voyez une meilleure manière de gérer l'interruption de ce tte
commande, en l'incluant dans une boucle while par exemple.
Je souhaite enregistrer en mon absence mon émission radio préféré e, émise en streaming mp3. J'utilise dans un script wget qui sauvegarde le streamin g en question, mais il faut l'interrompre au terme de la durée de l'émis sion. J'essaye ceci :
Mais je me dis que ça n'est pas satisfaisant, parce que l'identité du processus repose sur la présence d'une chaîne de caractère, et que je réc upère inévitablement 2 numéros de processus parce que la commande "grep " apparaît elle-même dans la liste renvoyée par ps :-(
Je me demandais donc - si vous voyez une manière de résoudre le double n° de processus - si vous voyez une meilleure manière de gérer l'interruption de ce tte commande, en l'incluant dans une boucle while par exemple.
Merci d'avance,
Laurent Wacrenier
[Sauron De Mordor] écrit:
Gauthier wrote:
Bonjour à tous,
Je souhaite enregistrer en mon absence mon émission radio préférée, émise en streaming mp3. J'utilise dans un script wget qui sauvegarde le streaming en question, mais il faut l'interrompre au terme de la durée de l'émission. J'essaye ceci :
Je souhaite enregistrer en mon absence mon émission radio préférée, émise en
streaming mp3. J'utilise dans un script wget qui sauvegarde le streaming en
question, mais il faut l'interrompre au terme de la durée de l'émission.
J'essaye ceci :
Je souhaite enregistrer en mon absence mon émission radio préférée, émise en streaming mp3. J'utilise dans un script wget qui sauvegarde le streaming en question, mais il faut l'interrompre au terme de la durée de l'émission. J'essaye ceci :
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID!
-- __Pascal_Bourguignon__ http://www.informatimago.com/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years, but no more than 8 years in captivity. http://www.theadvocates.org/
Laurent Wacrenier <lwa@ teaser . fr> writes:
également :
(sleep ${LENGTH}; kill $$) &
exec wget ...
C'est pas croyable les bétises qu'on peut lire parfois!
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID!
--
__Pascal_Bourguignon__ http://www.informatimago.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years,
but no more than 8 years in captivity. http://www.theadvocates.org/
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID!
-- __Pascal_Bourguignon__ http://www.informatimago.com/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years, but no more than 8 years in captivity. http://www.theadvocates.org/
alouest.du.soleil
Le 27 Nov 2003 23:13:39 +0100, Pascal Bourguignon a écrit:
Laurent Wacrenier <lwa@ teaser . fr> writes:
également :
(sleep ${LENGTH}; kill $$) & exec wget ...
C'est pas croyable les bétises qu'on peut lire parfois!
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID!
Donc, si je comprends bien, c'est ; qu'il faut utiliser après la parenthèse. Mais de toute façon, je ne comprend pas cette proposition ; j'aurais cru que l'intérieur des parenthèses serait exécuté en premier, et ensuite seulement ce qui suit (exec wget...)
Vous pouvez m'en dire plus ? -- ^^ Gauthier (_____/°°-ç | _`-" )/@mmm|| nn nn FOE-Belgium : http://www.amisdelaterre.be
Le 27 Nov 2003 23:13:39 +0100,
Pascal Bourguignon <spam@thalassa.informatimago.com> a écrit:
Laurent Wacrenier <lwa@ teaser . fr> writes:
également :
(sleep ${LENGTH}; kill $$) &
exec wget ...
C'est pas croyable les bétises qu'on peut lire parfois!
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID!
Donc, si je comprends bien, c'est ; qu'il faut utiliser après la parenthèse.
Mais de toute façon, je ne comprend pas cette proposition ; j'aurais cru que
l'intérieur des parenthèses serait exécuté en premier, et ensuite seulement
ce qui suit (exec wget...)
Vous pouvez m'en dire plus ?
--
^^ Gauthier
(_____/°°-ç
| _`-"
)/@mmm||
nn nn FOE-Belgium : http://www.amisdelaterre.be
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID!
Donc, si je comprends bien, c'est ; qu'il faut utiliser après la parenthèse. Mais de toute façon, je ne comprend pas cette proposition ; j'aurais cru que l'intérieur des parenthèses serait exécuté en premier, et ensuite seulement ce qui suit (exec wget...)
Vous pouvez m'en dire plus ? -- ^^ Gauthier (_____/°°-ç | _`-" )/@mmm|| nn nn FOE-Belgium : http://www.amisdelaterre.be
Stephane Chazelas
2003-11-27, 23:13(+01), Pascal Bourguignon:
Laurent Wacrenier <lwa@ teaser . fr> writes:
également :
(sleep ${LENGTH}; kill $$) & exec wget ... [...]
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID!
$$ est le PID du shell qui a démarré le script, qu'on soit dans un sous shell (en background, en foreground), dans un arriere-arriere-arriere...-petit fils ou le processus père.
Elle est définie une fois pour toutes et n'est pas touchée par la suite.
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID!
$$ est le PID du shell qui a démarré le script, qu'on soit dans
un sous shell (en background, en foreground), dans un
arriere-arriere-arriere...-petit fils ou le processus père.
Elle est définie une fois pour toutes et n'est pas touchée par
la suite.
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID!
$$ est le PID du shell qui a démarré le script, qu'on soit dans un sous shell (en background, en foreground), dans un arriere-arriere-arriere...-petit fils ou le processus père.
Elle est définie une fois pour toutes et n'est pas touchée par la suite.
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID! [...]
Au passage, ( ... ) implique un fork aussi. La différence avec ( ... ) &, c'est juste que le père fait un waitpid du fils. Dans "/bin/echo $$", il y a un fork aussi.
Donc, pids différents aussi, mais dans un cas comme dans tout autre, $$ ne bouge pas.
Pour connaître le pid du shell qui interprête une certaine commande, on peut faire
pid=$(sh -c 'echo "$PPID"') ou sous Linux: { read;read;read;read REPLY pid; } < /proc/self/status
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID!
[...]
Au passage, ( ... ) implique un fork aussi. La différence avec
( ... ) &, c'est juste que le père fait un waitpid du fils.
Dans "/bin/echo $$", il y a un fork aussi.
Donc, pids différents aussi, mais dans un cas comme dans tout
autre, $$ ne bouge pas.
Pour connaître le pid du shell qui interprête une certaine
commande, on peut faire
pid=$(sh -c 'echo "$PPID"')
ou sous Linux:
{ read;read;read;read REPLY pid; } < /proc/self/status
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID! [...]
Au passage, ( ... ) implique un fork aussi. La différence avec ( ... ) &, c'est juste que le père fait un waitpid du fils. Dans "/bin/echo $$", il y a un fork aussi.
Donc, pids différents aussi, mais dans un cas comme dans tout autre, $$ ne bouge pas.
Pour connaître le pid du shell qui interprête une certaine commande, on peut faire
pid=$(sh -c 'echo "$PPID"') ou sous Linux: { read;read;read;read REPLY pid; } < /proc/self/status
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID!
Donc, si je comprends bien, c'est ; qu'il faut utiliser après la parenthèse. Mais de toute façon, je ne comprend pas cette proposition ; j'aurais cru que l'intérieur des parenthèses serait exécuté en premier, et ensuite seulement ce qui suit (exec wget...)
Vous pouvez m'en dire plus ?
Oui, c'est moi qui ai écrit une grosse bétise. Désolé. Où c'est-y qu'il vit l'enchanteur de Maupert déjà? J'ai coupé collé le résultat de "(sleep 1 ; echo $$ ) & echo $$" un peu trop vite:
Dans un sous shell, $$ référence toujours le pid du shell initial. Alors:
(sleep ${LENGTH}; kill $$) & exec wget ...
devrait fonctionner.
-- __Pascal_Bourguignon__ http://www.informatimago.com/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years, but no more than 8 years in captivity. http://www.theadvocates.org/
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID!
Donc, si je comprends bien, c'est ; qu'il faut utiliser après la parenthèse.
Mais de toute façon, je ne comprend pas cette proposition ; j'aurais cru que
l'intérieur des parenthèses serait exécuté en premier, et ensuite seulement
ce qui suit (exec wget...)
Vous pouvez m'en dire plus ?
Oui, c'est moi qui ai écrit une grosse bétise. Désolé. Où c'est-y
qu'il vit l'enchanteur de Maupert déjà? J'ai coupé collé le résultat
de "(sleep 1 ; echo $$ ) & echo $$" un peu trop vite:
Dans un sous shell, $$ référence toujours le pid du shell initial. Alors:
(sleep ${LENGTH}; kill $$) & exec wget ...
devrait fonctionner.
--
__Pascal_Bourguignon__ http://www.informatimago.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years,
but no more than 8 years in captivity. http://www.theadvocates.org/
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID!
Donc, si je comprends bien, c'est ; qu'il faut utiliser après la parenthèse. Mais de toute façon, je ne comprend pas cette proposition ; j'aurais cru que l'intérieur des parenthèses serait exécuté en premier, et ensuite seulement ce qui suit (exec wget...)
Vous pouvez m'en dire plus ?
Oui, c'est moi qui ai écrit une grosse bétise. Désolé. Où c'est-y qu'il vit l'enchanteur de Maupert déjà? J'ai coupé collé le résultat de "(sleep 1 ; echo $$ ) & echo $$" un peu trop vite:
Dans un sous shell, $$ référence toujours le pid du shell initial. Alors:
(sleep ${LENGTH}; kill $$) & exec wget ...
devrait fonctionner.
-- __Pascal_Bourguignon__ http://www.informatimago.com/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years, but no more than 8 years in captivity. http://www.theadvocates.org/
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID! [...]
Au passage, ( ... ) implique un fork aussi. La différence avec ( ... ) &, c'est juste que le père fait un waitpid du fils. Dans "/bin/echo $$", il y a un fork aussi.
Oui, mais c'est différent, $$ est un argument évalué par le shell appelant. Sauf qu'il n'est initialisé que par le shell initial et pas par les sous-shells. Je suis tombé dans ce piège.
Donc, pids différents aussi, mais dans un cas comme dans tout autre, $$ ne bouge pas.
Pour connaître le pid du shell qui interprête une certaine commande, on peut faire
pid=$(sh -c 'echo "$PPID"') ou sous Linux: { read;read;read;read REPLY pid; } < /proc/self/status
Merci.
-- __Pascal_Bourguignon__ http://www.informatimago.com/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years, but no more than 8 years in captivity. http://www.theadvocates.org/
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID!
[...]
Au passage, ( ... ) implique un fork aussi. La différence avec
( ... ) &, c'est juste que le père fait un waitpid du fils.
Dans "/bin/echo $$", il y a un fork aussi.
Oui, mais c'est différent, $$ est un argument évalué par le shell
appelant. Sauf qu'il n'est initialisé que par le shell initial et pas
par les sous-shells. Je suis tombé dans ce piège.
Donc, pids différents aussi, mais dans un cas comme dans tout
autre, $$ ne bouge pas.
Pour connaître le pid du shell qui interprête une certaine
commande, on peut faire
pid=$(sh -c 'echo "$PPID"')
ou sous Linux:
{ read;read;read;read REPLY pid; } < /proc/self/status
Merci.
--
__Pascal_Bourguignon__ http://www.informatimago.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years,
but no more than 8 years in captivity. http://www.theadvocates.org/
Au cas où tu ne n'aurais pas remarqué, & <=> fork <=> on change de PID! [...]
Au passage, ( ... ) implique un fork aussi. La différence avec ( ... ) &, c'est juste que le père fait un waitpid du fils. Dans "/bin/echo $$", il y a un fork aussi.
Oui, mais c'est différent, $$ est un argument évalué par le shell appelant. Sauf qu'il n'est initialisé que par le shell initial et pas par les sous-shells. Je suis tombé dans ce piège.
Donc, pids différents aussi, mais dans un cas comme dans tout autre, $$ ne bouge pas.
Pour connaître le pid du shell qui interprête une certaine commande, on peut faire
pid=$(sh -c 'echo "$PPID"') ou sous Linux: { read;read;read;read REPLY pid; } < /proc/self/status
Merci.
-- __Pascal_Bourguignon__ http://www.informatimago.com/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years, but no more than 8 years in captivity. http://www.theadvocates.org/
Ian
Gauthier wrote:
Bonjour à tous,
Je souhaite enregistrer en mon absence mon émission radio préférée, émise en streaming mp3. J'utilise dans un script wget qui sauvegarde le streaming en question, mais il faut l'interrompre au terme de la durée de l'émission. J'essaye ceci :
Mais je me dis que ça n'est pas satisfaisant, parce que l'identité du processus repose sur la présence d'une chaîne de caractère, et que je récupère inévitablement 2 numéros de processus parce que la commande "grep " apparaît elle-même dans la liste renvoyée par ps :-(
Je me demandais donc - si vous voyez une manière de résoudre le double n° de processus
En général, on ajoute un | grep -v grep dans la ligne de commande :
Je souhaite enregistrer en mon absence mon émission radio préférée, émise en
streaming mp3. J'utilise dans un script wget qui sauvegarde le streaming en
question, mais il faut l'interrompre au terme de la durée de l'émission.
J'essaye ceci :
Mais je me dis que ça n'est pas satisfaisant, parce que l'identité du processus
repose sur la présence d'une chaîne de caractère, et que je récupère
inévitablement 2 numéros de processus parce que la commande "grep " apparaît
elle-même dans la liste renvoyée par ps :-(
Je me demandais donc
- si vous voyez une manière de résoudre le double n° de processus
En général, on ajoute un | grep -v grep dans la ligne de commande :
Je souhaite enregistrer en mon absence mon émission radio préférée, émise en streaming mp3. J'utilise dans un script wget qui sauvegarde le streaming en question, mais il faut l'interrompre au terme de la durée de l'émission. J'essaye ceci :
Mais je me dis que ça n'est pas satisfaisant, parce que l'identité du processus repose sur la présence d'une chaîne de caractère, et que je récupère inévitablement 2 numéros de processus parce que la commande "grep " apparaît elle-même dans la liste renvoyée par ps :-(
Je me demandais donc - si vous voyez une manière de résoudre le double n° de processus
En général, on ajoute un | grep -v grep dans la ligne de commande :