Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 03/03/2010, 15h19   #1
Invité de passage
 
Inscription : novembre 2007
Messages : 105
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 105
Points : 3
Points : 3
Par défaut Un lock en shell

Bonjour,

J'ai un peogramme java qui est lancé a partir d'un script schell. Je voudrai savoir si quelqu'un a un exemple shell pour mon programme ne peut pas etre exécuté dans le cas où il tourne encore ?

Merci
air75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2010, 16h25   #2
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 896
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 896
Points : 3 676
Points : 3 676
Bonjour air75,

Code bash :
1
2
3
4
[ -n "$(pidof prog_java)" ] && {
   echo "prog_java est déjà en cours d'exécution... Je sors."
   exit
} #|| echo OK
...
?

Dernière modification par N_BaH ; 03/03/2010 à 16h39.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2010, 17h56   #3
Invité de passage
 
Inscription : novembre 2007
Messages : 105
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 105
Points : 3
Points : 3
Bonjour,

dans mon batch je lance ma classe java a partir de la commande :

lance_java nomDeClasse


est ce que ça ca marche ?
Code :
1
2
3
4
[ -n "$(pidof nomDeClasse"]&&{
  exit
}
lance_java nomDeClasse
merci

Dernière modification par al1_24 ; 03/03/2010 à 18h39.
air75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2010, 18h08   #4
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 896
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 896
Points : 3 676
Points : 3 676
On recommence depuis le début, parce que je ne connais pas du tout java :

tu as un script shell (lance_java), qui accepte un paramètre, et qui lance un programme java (NomdeClasse) ?

pour vérifier, lance ton programme java, et dans une autre console (pour faire simple) tape pidof NomdeClasse
--
PS:
respecte les espaces, et


merci
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2010, 23h30   #5
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Bonsoir,

J'ai un début de solution, mais j'ai encore un problème. Lorsque je lance une application en background, je le fais de la manière suivante:
Et j'ai en retour quelque chose comme:
Cependant, je n'arrive pas à capturer cette ligne par stdout ou stderr. J'ai l'impression que la ligne vient du subshell. Comment la récupérer avec un code du genre:
Ensuite, le code pour n'avoir qu'une seule application lancée sur le système est assez simple, mais il me faut récupérer le pid d'abord.
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 00h01   #6
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 896
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 896
Points : 3 676
Points : 3 676
$! Se transforme en PID de la commande (asynchrone) exécutée en arrière-plan le plus récemment.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 08h36   #7
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Ha, c'est simple donc! Merci N_BaH.

Voici un premier jet. Je devrais mieux vérifier chaque étape, je verrai si j'ai assez de temps plus tard.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
 
className="$1"
classFile="/tmp/$1.pid"
 
if [[ -r $classFile ]]
then
  classPid=$(cat "$classFile")
  if ps -p $classPid | tail -1 | grep -q $className
  then
    echo "ERROR: $className already running (pid: $classPid)" >&2
    exit 1
  fi
fi
java $className
echo $! > $classFile
C'est pas testé (et je fais rarement du code fonctionnel la première fois)
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 08h51.


 
 
 
 
Partenaires

Hébergement Web