faire tourner un script un certain temps [débutant]
8 réponses
jip
bonjour,
je voudrais faire tourner un script un certain temps;
par exemple:
mon script contient cette ligne:
dd if=/dev/urandom of=./monfic
(qui remplit en continu le fichier monfic de données
aléatoires)
Je voudrais pourvoir lancer ce script et qu'il s'arrête
après un temps (à éventuellement indiquer dans les
paramètres de lancement du script ou dans le script
lui-même).
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
lhabert
jip :
Je voudrais pourvoir lancer ce script et qu'il s'arrête après un temps (à éventuellement indiquer dans les paramètres de lancement du script ou dans le script lui-même).
Tu peux mettre quelque chose comme ça au début de ton script :
PID=$$ (sleep NN ; kill "$PID")&
et dans la suite du script lancer ton dd avec « exec » (sinon, c'est le shell qui exécute le script que tu vas tuer, et non le dd).
Bon, ça a l'inconvénient que si le dd meurt d'abord, le pid pourrait être réaffecté à un autre process au moment où le kill est exécuté.
jip :
Je voudrais pourvoir lancer ce script et qu'il s'arrête
après un temps (à éventuellement indiquer dans les
paramètres de lancement du script ou dans le script
lui-même).
Tu peux mettre quelque chose comme ça au début de ton script :
PID=$$
(sleep NN ; kill "$PID")&
et dans la suite du script lancer ton dd avec « exec » (sinon, c'est le
shell qui exécute le script que tu vas tuer, et non le dd).
Bon, ça a l'inconvénient que si le dd meurt d'abord, le pid pourrait être
réaffecté à un autre process au moment où le kill est exécuté.
Je voudrais pourvoir lancer ce script et qu'il s'arrête après un temps (à éventuellement indiquer dans les paramètres de lancement du script ou dans le script lui-même).
Tu peux mettre quelque chose comme ça au début de ton script :
PID=$$ (sleep NN ; kill "$PID")&
et dans la suite du script lancer ton dd avec « exec » (sinon, c'est le shell qui exécute le script que tu vas tuer, et non le dd).
Bon, ça a l'inconvénient que si le dd meurt d'abord, le pid pourrait être réaffecté à un autre process au moment où le kill est exécuté.
Je voudrais pourvoir lancer ce script et qu'il s'arrête après un temps (à éventuellement indiquer dans les paramètres de lancement du script ou dans le script lui-même).
Tu peux mettre quelque chose comme ça au début de ton script :
PID=$$ (sleep NN ; kill "$PID")&
et dans la suite du script lancer ton dd avec « exec » (sinon, c'est le shell qui exécute le script que tu vas tuer, et non le dd).
Plus simple avec:
dd .. & sleep NN kill "$!"
Bon, ça a l'inconvénient que si le dd meurt d'abord, le pid pourrait être réaffecté à un autre process au moment où le kill est exécuté.
Je voudrais pourvoir lancer ce script et qu'il s'arrête
après un temps (à éventuellement indiquer dans les
paramètres de lancement du script ou dans le script
lui-même).
Tu peux mettre quelque chose comme ça au début de ton script :
PID=$$
(sleep NN ; kill "$PID")&
et dans la suite du script lancer ton dd avec « exec » (sinon, c'est le
shell qui exécute le script que tu vas tuer, et non le dd).
Plus simple avec:
dd .. &
sleep NN
kill "$!"
Bon, ça a l'inconvénient que si le dd meurt d'abord, le pid pourrait être
réaffecté à un autre process au moment où le kill est exécuté.
Je voudrais pourvoir lancer ce script et qu'il s'arrête après un temps (à éventuellement indiquer dans les paramètres de lancement du script ou dans le script lui-même).
Tu peux mettre quelque chose comme ça au début de ton script :
PID=$$ (sleep NN ; kill "$PID")&
et dans la suite du script lancer ton dd avec « exec » (sinon, c'est le shell qui exécute le script que tu vas tuer, et non le dd).
Plus simple avec:
dd .. & sleep NN kill "$!"
Bon, ça a l'inconvénient que si le dd meurt d'abord, le pid pourrait être réaffecté à un autre process au moment où le kill est exécuté.
Meme probleme avec cette autre solution
-- Stephane
lhabert
Stephane Chazelas :
dd .. & sleep NN kill "$!"
Oui. Ça présente le léger inconvénient que si le dd meurt d'abord, le script va quand même attendre NN secondes avant de se terminer (dans ma méthode il reste un fils qui traine, certes, mais le père ne le voit pas).
Stephane Chazelas :
dd .. &
sleep NN
kill "$!"
Oui. Ça présente le léger inconvénient que si le dd meurt d'abord, le script
va quand même attendre NN secondes avant de se terminer (dans ma méthode
il reste un fils qui traine, certes, mais le père ne le voit pas).
Oui. Ça présente le léger inconvénient que si le dd meurt d'abord, le script va quand même attendre NN secondes avant de se terminer (dans ma méthode il reste un fils qui traine, certes, mais le père ne le voit pas).
jip
Tu peux mettre quelque chose comme ça au début de ton script :
PID=$$ (sleep NN ; kill "$PID")&
et dans la suite du script lancer ton dd avec « exec » (sinon, c'est le shell qui exécute le script que tu vas tuer, et non le dd).
Bon, ça a l'inconvénient que si le dd meurt d'abord, le pid pourrait être réaffecté à un autre process au moment où le kill est exécuté.
merci beaucoup. ça me va très bien le petit inconvénient est, au cas particulier, sans incidence.
bon we jip
Tu peux mettre quelque chose comme ça au début de ton script :
PID=$$
(sleep NN ; kill "$PID")&
et dans la suite du script lancer ton dd avec « exec » (sinon, c'est le
shell qui exécute le script que tu vas tuer, et non le dd).
Bon, ça a l'inconvénient que si le dd meurt d'abord, le pid pourrait être
réaffecté à un autre process au moment où le kill est exécuté.
merci beaucoup.
ça me va très bien
le petit inconvénient est, au cas particulier, sans incidence.
Tu peux mettre quelque chose comme ça au début de ton script :
PID=$$ (sleep NN ; kill "$PID")&
et dans la suite du script lancer ton dd avec « exec » (sinon, c'est le shell qui exécute le script que tu vas tuer, et non le dd).
Bon, ça a l'inconvénient que si le dd meurt d'abord, le pid pourrait être réaffecté à un autre process au moment où le kill est exécuté.
merci beaucoup. ça me va très bien le petit inconvénient est, au cas particulier, sans incidence.
bon we jip
jip
Et si je fais ce qui suit en partant de vos solutions, mon script est 'correct' ?
------------------------------ #!/bin/bash echo "Ce programme est en train d'écrire un fichier aléatoire" echo "dans le dossier en cours sous le nom 'monfic'"
# juste pour voir l'heure de début date # temps donné NN=5
# le script continue... # juste pour voir l'heure de fin date # listing de contrôle ls -l
-----------------------------------
Et si je fais ce qui suit en partant de vos solutions,
mon script est 'correct' ?
------------------------------
#!/bin/bash
echo "Ce programme est en train d'écrire un fichier aléatoire"
echo "dans le dossier en cours sous le nom 'monfic'"
# juste pour voir l'heure de début
date
# temps donné
NN=5
Et si je fais ce qui suit en partant de vos solutions, mon script est 'correct' ?
------------------------------ #!/bin/bash echo "Ce programme est en train d'écrire un fichier aléatoire" echo "dans le dossier en cours sous le nom 'monfic'"
# juste pour voir l'heure de début date # temps donné NN=5
# le script continue... # juste pour voir l'heure de fin date # listing de contrôle ls -l
-----------------------------------
lhabert
jip :
(sleep "$NN" ; kill "$PID")
Tu n'as pas besoin de mettre des parenthèses. Elles ont pour effet de lancer le machin dans un sous-shell. Je les avais mises histoire de grouper les deux commandes sous le « & » : je voulais vraiment lancer un sous-shell en arrière plan.
jip :
(sleep "$NN" ; kill "$PID")
Tu n'as pas besoin de mettre des parenthèses. Elles ont pour effet de lancer
le machin dans un sous-shell. Je les avais mises histoire de grouper les
deux commandes sous le « & » : je voulais vraiment lancer un sous-shell en
arrière plan.
Tu n'as pas besoin de mettre des parenthèses. Elles ont pour effet de lancer le machin dans un sous-shell. Je les avais mises histoire de grouper les deux commandes sous le « & » : je voulais vraiment lancer un sous-shell en arrière plan.
jip
Luc Habert wrote:
jip :
(sleep "$NN" ; kill "$PID")
Tu n'as pas besoin de mettre des parenthèses. Elles ont pour effet de lancer le machin dans un sous-shell. Je les avais mises histoire de grouper les deux commandes sous le « & » : je voulais vraiment lancer un sous-shell en arrière plan. ok
Luc Habert wrote:
jip :
(sleep "$NN" ; kill "$PID")
Tu n'as pas besoin de mettre des parenthèses. Elles ont pour effet de
lancer le machin dans un sous-shell. Je les avais mises histoire de
grouper les deux commandes sous le « & » : je voulais vraiment lancer un
sous-shell en arrière plan.
ok
Tu n'as pas besoin de mettre des parenthèses. Elles ont pour effet de lancer le machin dans un sous-shell. Je les avais mises histoire de grouper les deux commandes sous le « & » : je voulais vraiment lancer un sous-shell en arrière plan. ok
Pascal Bourguignon
jip writes:
bonjour, je voudrais faire tourner un script un certain temps; par exemple: mon script contient cette ligne:
dd if=/dev/urandom of=./monfic
(qui remplit en continu le fichier monfic de données aléatoires)
Je voudrais pourvoir lancer ce script et qu'il s'arrête après un temps (à éventuellement indiquer dans les paramètres de lancement du script ou dans le script lui-même).
-- __Pascal Bourguignon__ http://www.informatimago.com/ Kitty like plastic. Confuses for litter box. Don't leave tarp around.
jip <j-pierre@wanadoo.fr> writes:
bonjour,
je voudrais faire tourner un script un certain temps;
par exemple:
mon script contient cette ligne:
dd if=/dev/urandom of=./monfic
(qui remplit en continu le fichier monfic de données
aléatoires)
Je voudrais pourvoir lancer ce script et qu'il s'arrête
après un temps (à éventuellement indiquer dans les
paramètres de lancement du script ou dans le script
lui-même).
bonjour, je voudrais faire tourner un script un certain temps; par exemple: mon script contient cette ligne:
dd if=/dev/urandom of=./monfic
(qui remplit en continu le fichier monfic de données aléatoires)
Je voudrais pourvoir lancer ce script et qu'il s'arrête après un temps (à éventuellement indiquer dans les paramètres de lancement du script ou dans le script lui-même).