Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
635 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [java] [linux] arreter un programme java qui boucle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[java] [linux] arreter un programme java qui boucle

n°1252091
fcoisb
go ! go ! go !
Posté le 24-11-2005 à 10:52:53  profilanswer
 

Bonjour,
j'ai un script sh (lancé en arrière plan) qui permet de lancer un programme java qui lui tourne en boucle.
Comment puis je arreter proprement le programme java à la fin de la boucle (demande d'arret à n'importe quel moment). Et non de réaliser un kill....
 
Merci d'avance!  
 :wahoo:

mood
Publicité
Posté le 24-11-2005 à 10:52:53  profilanswer
 

n°1252104
sircam
I Like Trains
Posté le 24-11-2005 à 11:06:39  profilanswer
 

:heink:
 
Quand il n'y a plus d'instruction à exécuter, la machine virtuelle s'arrête.
 


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1252119
fcoisb
go ! go ! go !
Posté le 24-11-2005 à 11:15:18  profilanswer
 

Oui mais moi, j'ai besoin que ça tourne tout le temps. --> donc une boucle while(true)
Mais desfois j'ai besoin de l'arreter et de le redémarrer....

n°1252138
0liv
Posté le 24-11-2005 à 11:31:22  profilanswer
 

Bonjour,
 
et pourquoi ne pas faire un kill -3 ou kill -15  :??:  
 
Oliv'

n°1252204
sircam
I Like Trains
Posté le 24-11-2005 à 13:13:55  profilanswer
 

fcoisb a écrit :

Oui mais moi, j'ai besoin que ça tourne tout le temps. --> donc une boucle while(true)
Mais desfois j'ai besoin de l'arreter et de le redémarrer....


Tu prévois une condition d'arrêt de ta boucle, alors ?


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1252247
fcoisb
go ! go ! go !
Posté le 24-11-2005 à 14:14:54  profilanswer
 

non, faut que ça tourne tout le temps :-)

n°1252248
uriel
blood pt.2
Posté le 24-11-2005 à 14:16:28  profilanswer
 

[:pingouino]
 
 faut pas que a tourne tout le temps si tu souhaites l'arreter de temps en temps....


---------------
IVG en france
n°1252250
Roane
Pingouino's fan
Posté le 24-11-2005 à 14:17:50  profilanswer
 

Eteins le pc :o


---------------
http://www.alsacreations.com, http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net. A ne surtout pas prendre en exemple : http://www.worldinternet.be
n°1252251
0x90
Posté le 24-11-2005 à 14:17:51  profilanswer
 

Il veut dire une condition d'arrêt externe je pense, du genre "tant que ce fichier existe", ensuite en bash il te suffit de créer le fichier, lancer ton prog, et dès que tu supprime le fichier, ton machin en java s'arrète.
(ok c'est mauche, lent, mais c'est pour expliquer l'idée)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1252260
sircam
I Like Trains
Posté le 24-11-2005 à 14:23:41  profilanswer
 

uriel a écrit :

[:pingouino]
 
 faut pas que a tourne tout le temps si tu souhaites l'arreter de temps en temps....


 
C'est soit l'un, soit l'autre. Et quand tu dis "tourne tout le temps", en fait, tu veux dire "tourne tout le temps jusqu'à ce que je lui dise, je ne sais pas encore comment, d'arrêter de tourner." Et ça, c'est une condition d'arrêt.  [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
mood
Publicité
Posté le 24-11-2005 à 14:23:41  profilanswer
 

n°1252861
g012
Posté le 25-11-2005 à 05:11:19  profilanswer
 

Tu peux le killer et arrêter ton prog proprement en installant un hook:
Runtime.getRuntime().addShutdownHook. C'est appelé quand la jvm se ferme (donc quand tu la kill aussi ;).

n°1253361
lorill
Posté le 25-11-2005 à 16:36:07  profilanswer
 

ca depends comment tu la killes...
 

Citation :

In rare circumstances the virtual machine may abort, that is, stop running without shutting down cleanly. This occurs when the virtual machine is terminated externally, for example with the SIGKILL signal on Unix or the TerminateProcess call on Microsoft Windows.


 
http://java.sun.com/j2se/1.4.2/doc [...] ng.Thread)

n°1253364
elianor
bannie 17 fois
Posté le 25-11-2005 à 16:40:08  profilanswer
 

g012 a écrit :

Tu peux le killer et arrêter ton prog proprement en installant un hook:
Runtime.getRuntime().addShutdownHook. C'est appelé quand la jvm se ferme (donc quand tu la kill aussi ;).


 
kill ne sert pas à tuer une application, mais à lui envoyer un signal :o


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
n°1253593
Profil sup​primé
Posté le 26-11-2005 à 01:22:32  answer
 

salut je suis pas programeur mais j'ai une idée peut etre qui vaut rien du tout mais bon je vous l'expose au cas ou ca vous inspirerez.
 
Pk pas créer deux threads ds le programe dont un avec la boucle et l'autre avec une condition pour arreter la boucle ds les grande lignes:
 
int p = 0;
thread1{boucle +une condition   if(p==0){la boucle s'arrete pas}
else{boucle s'arrete (break;)}}
 
 
tread2{si je clique sur le bouton p vaut 1;}

n°1253649
benou
Posté le 26-11-2005 à 11:43:11  profilanswer
 

le truc c'est qu'il veut arrêter son prog java en dehors du process java si j'ai bien compris => il faut se décider sur un évenement qui sera "captable" depuis le prog java et générable depus l'extérieur du fichier.
 
en unix, ce serait un signal (kill machin). Ca peut aussi être une trame tcp, ou un test sur l'existence d'un fichier ...


---------------
ma vie, mon oeuvre - HomePlayer
n°1253721
sircam
I Like Trains
Posté le 26-11-2005 à 13:58:53  profilanswer
 

benou a écrit :

le truc c'est qu'il veut arrêter son prog java en dehors du process java si j'ai bien compris => il faut se décider sur un évenement qui sera "captable" depuis le prog java et générable depus l'extérieur du fichier.
 
en unix, ce serait un signal (kill machin). Ca peut aussi être une trame tcp, ou un test sur l'existence d'un fichier ...


benou > Pour la trame TCP ou le test d'existence fichier, ça marche, mais ce qui m'agace, c'est que rien ne te dit que tu pourras arrêter la boucle principale directement, ou même l'arrêter tout court :
 
- Si la boucle principale "pseudo-infinie" fait son job, puis un sleep, ça veut dire que tu devras adapter le sleep à la granularité de réaction souhaitée. P.e. 1s pour qu'au pire, on attende 1s si la condition d'arrêt est détectée. Ce qui oblige à calquer la longueur du sleep sur la granularité du signal d'arrêt.
 
- Si la boucle principale comporte un appel bloquant, c'est super emmerdant. Si c'est un appel bloquant sur socket, tu peux imaginer d'envoyer le signal convenu sur ce socket, mais c'est par toujours évident ou souhaitable.
 
Bien entendu, un thread java qui boucle et qui doit pouvoir être arrêté est supposé vérifier périodiquement si une condition d'arrêt est remplie, as per javadoc, puisqu'un "stop" n'est pas permis. Bonne chance s'il est bloqué ou si sa granularité de le lui permet pas.
 
Le problème est que contrairement au signal (kill), on obtient un modèle pull, où le thread principal doit soit faire le boulot de voir la condition d'arrêt est remplie, soit au moins être de bonne composition et réagir promptement si on le notifie.
 
Reste encore la possibilité de jouer avec les threads deamon, mais ça ne fait peut-être que déplacer le problème.
 
Ou le shutdown hook.    [:pingouino]  
 
Des fois, Java...


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1253888
benou
Posté le 26-11-2005 à 18:55:07  profilanswer
 

sircam a écrit :

benou > Pour la trame TCP ou le test d'existence fichier, ça marche, mais ce qui m'agace, c'est que rien ne te dit que tu pourras arrêter la boucle principale directement, ou même l'arrêter tout court :
 
- Si la boucle principale "pseudo-infinie" fait son job, puis un sleep, ça veut dire que tu devras adapter le sleep à la granularité de réaction souhaitée. P.e. 1s pour qu'au pire, on attende 1s si la condition d'arrêt est détectée. Ce qui oblige à calquer la longueur du sleep sur la granularité du signal d'arrêt.


Bha non ... ton thread qui écoute la socket fait un leThreadDeLaBouclePrincipale.interupt() et zou !
 

sircam a écrit :


- Si la boucle principale comporte un appel bloquant, c'est super emmerdant. Si c'est un appel bloquant sur socket, tu peux imaginer d'envoyer le signal convenu sur ce socket, mais c'est par toujours évident ou souhaitable.


Ouais. là ça craint.
Je me suis toujours demandé pkoi un read sur un InputStream pouvait pas balancer un InterruptedException (qui serait runtime soit dit en passant).
avec java.nio y a moyen de faire des lectures non bloquantes ...
 

sircam a écrit :


Le problème est que contrairement au signal (kill), on obtient un modèle pull, où le thread principal doit soit faire le boulot de voir la condition d'arrêt est remplie, soit au moins être de bonne composition et réagir promptement si on le notifie.


C'est la seule façon de faire si tu veux que ton programme se ferme proprement... c'est pas pour rien que le stop a été rendu deprecated dans les threads.
 

sircam a écrit :


Reste encore la possibilité de jouer avec les threads deamon, mais ça ne fait peut-être que déplacer le problème.
 
Ou le shutdown hook.    [:pingouino]


je vois pas ce que ça change ... ni les threads daemon, ni le shutdownhook ...  :??:  
 
 

sircam a écrit :

Des fois, Java...


[:tonton_benou]


Message édité par benou le 26-11-2005 à 18:56:57

---------------
ma vie, mon oeuvre - HomePlayer

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [java] [linux] arreter un programme java qui boucle

 

Sujets relatifs
comment faire un exposant en javaBoucle sur un fichier
Java et la transparence....[shell script] boucle for qui ne marche pas
mettre des lettres à la suite dans un label avec un boucle...plantage application sous java
Comment lancer un programme à un temps donnéeC# ca fait pitié face a java, et en plus ca donne pas de taff
boucle pour fonction mail()Réaliser une application FTP en java
Plus de sujets relatifs à : [java] [linux] arreter un programme java qui boucle


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR