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

faire tourner un script un certain temps [débutant]

8 réponses
Avatar
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).

merci,

jip

8 réponses

Avatar
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é.

Avatar
Stephane Chazelas
On Fri, 22 Sep 2006 10:11:00 +0000 (UTC), Luc Habert wrote:
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).


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


Avatar
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).

Avatar
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

Avatar
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

dd if=/dev/urandom of=./monfic &
PID=$!
(sleep "$NN" ; kill "$PID")

# le script continue...
# juste pour voir l'heure de fin
date
# listing de contrôle
ls -l

-----------------------------------
Avatar
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.

Avatar
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



Avatar
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).


man dd

dd if=/dev/urandom of=./monfic bs=1k count=${UNE_CERTAINE_TAILLE}

--
__Pascal Bourguignon__ http://www.informatimago.com/
Kitty like plastic.
Confuses for litter box.
Don't leave tarp around.