Commande en arrière plan

Commande en arrière plan - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 01-04-2009 à 20:19:57    

Bonsoir,
J' ai un petit problème , dans un script je voudrais exécuter une commande du style :

 
Code :
  1. toto=`commande -argument`
 

Je dois la lancer en arrière plan et récupérer le pid pour la tuer si elle plante , toto et le résultat si la commande aboutit seront exploités dans le script) ,si vous pouviez m' aider pour la syntaxe , merci [:romf]

 

Un autre truc , dans un script , j' exécute une commande qui lance un processus rattaché à init ( un mount en fait ) , je ne sais pas comment récupérer ce pid de processus non plus  :sweat:

 

Merci d' avance pour le coup de main [:romf]

Message cité 1 fois
Message édité par Tuxerman12 le 01-04-2009 à 20:21:13
Reply

Marsh Posté le 01-04-2009 à 20:19:57   

Reply

Marsh Posté le 01-04-2009 à 21:35:41    

Lancer en arrière plan : toto &
Récupérer le pid : pidof toto


Message édité par Gavrinis le 01-04-2009 à 21:35:52
Reply

Marsh Posté le 02-04-2009 à 00:11:35    

Gavrinis, non, il y a une variable spéciale.
Il peux y avoir plusieurs process toto.
 

Code :
  1. plop &
  2. PidPlop=$!
  3. echo $PidPlop

Reply

Marsh Posté le 02-04-2009 à 12:11:30    

Merci bien , je vais essayer ça , je vous tiens au courant .
De mémoire , il me semble avoir déjà essayé hier :

Code :
  1. toto=`commande -argument` &


Le shell m' a jeté , je crois :sweat: , je vais retenter  
 
Je m' inspire de : http://redflo.de/tiki-index.php?pa [...] t+function , pour faire un petit script qui tue ses processus s' ils plantent .

Reply

Marsh Posté le 02-04-2009 à 12:59:34    

On ne peut lancer une commande en arrière plan entre back-quotes. D'ailleurs ça n'a aucun sens : lancer une commande en arrière plan ça veut dire continuer avant que la commande termine, alors que les backquotes supposent qu'on attende que la commande termine pour récupérer son output.

Reply

Marsh Posté le 02-04-2009 à 13:25:43    

Merci pour cette explication détaillée :jap:  
Il y a une solution pour lancer `commande -argument` en arrière plan et récupérer le résultat dans une variable du shell parent ? [:noxauror]
La commande c' est juste un find sur un disque réseau , du coup elle peut planter .

Reply

Marsh Posté le 02-04-2009 à 13:31:54    

Et tu ne penses pas que ton script devra, à un moment où à un autre, attendre que le find ait terminé pour faire quelque chose de sa sortie ? Dès lors, pourquoi lancer le find en arrière-plan ?

Reply

Marsh Posté le 02-04-2009 à 18:43:57    

Pour l' instant , j' ai un truc qui ressemble à ça , pour compter le nombre de fichiers et leurs tailles sur un disque de serveur .

Code :
  1. toto=`find /mnt/dir/ -type f | wc -l`
  2. titi=`du -sh /mnt/dir/`
  3. echo "$toto files , $titi disk"


Si le find ou le du plante , ça n' arrive jamais à l' echo , je voudrais avec un timer tuer les process plantés et créer une sortie explicite .
 
J' ai pensé à autrechose :

Code :
  1. (echo "`find /mnt/dir/ -type f | wc -l` files , `du -sh /mnt/dir/` disk" ) &


 
C' est correct comme idée et syntaxe ?

Reply

Marsh Posté le 06-04-2009 à 15:35:14    

Up  :sarcastic:

Reply

Marsh Posté le 07-04-2009 à 00:20:20    

exemple :

Code :
  1. /usr/bin/timeout 3600 command; (($?==124)) && echo >&2 "command failed"


man 1 timeout
local/coreutils sous archlinux

Reply

Marsh Posté le 07-04-2009 à 00:20:20   

Reply

Marsh Posté le 07-04-2009 à 10:45:12    

Merci [:romf] , je vais tester ça de suite  :D
Après avoir lu le script que j' ai mentionné plus haut , avec le timer qui tourne en arrière plan , j' ai cru qu' il n' y avait pas de fonction timeout en bash  :whistle:
Par contre , dans mon script , j' ai une commande qui n' accepte pas le kill normal , je vais être obligé de lui envoyer un kill -9 si elle plante .


Message édité par Tuxerman12 le 07-04-2009 à 10:46:37
Reply

Marsh Posté le 07-04-2009 à 11:23:19    

J' avais partiellement raison , il n' y a pas la commande timeout sur ma distrib (Opensuse).

Reply

Marsh Posté le 07-04-2009 à 17:33:59    

sur Debian ce n'est pas installe par defaut,mais c'est installable.


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 07-04-2009 à 17:34:42    

Il faut coreutils version 7 ou plus pour avoir la commande timeout. Elle a un flag -s pour spécifier le signal à utiliser pour tuer le processus.

Reply

Marsh Posté le 09-04-2009 à 11:35:38    

Oui , j' ai vu ça merci  :D  
Sous opensuse ils en sont à la version 6.x je sais plus combien , elle date de 2006 , et il n' y a pas plus récent en précompilé .
La commande timeout est incluse dans un autre paquet précompile "netatalk" , je vais pouvoir jouer avec timeout  :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed