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

arreter un programme java qui boucle [java] [linux] - Java - Programmation

Marsh Posté le 24-11-2005 à 10:52:53    

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:

Reply

Marsh Posté le 24-11-2005 à 10:52:53   

Reply

Marsh Posté le 24-11-2005 à 11:06:39    

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


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 24-11-2005 à 11:15:18    

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

Reply

Marsh Posté le 24-11-2005 à 11:31:22    

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

Reply

Marsh Posté le 24-11-2005 à 13:13:55    

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}
Reply

Marsh Posté le 24-11-2005 à 14:14:54    

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

Reply

Marsh Posté le 24-11-2005 à 14:16:28    

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


---------------
IVG en france
Reply

Marsh Posté le 24-11-2005 à 14:17:50    

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
Reply

Marsh Posté le 24-11-2005 à 14:17:51    

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

Marsh Posté le 24-11-2005 à 14:23:41    

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}
Reply

Marsh Posté le 24-11-2005 à 14:23:41   

Reply

Marsh Posté le 25-11-2005 à 05:11:19    

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

Reply

Marsh Posté le 25-11-2005 à 16:36:07    

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)

Reply

Marsh Posté le 25-11-2005 à 16:40:08    

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 §§§§§§§§
Reply

Marsh Posté le 26-11-2005 à 01:22:32    

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;}

Reply

Marsh Posté le 26-11-2005 à 11:43:11    

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
Reply

Marsh Posté le 26-11-2005 à 13:58:53    

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}
Reply

Marsh Posté le 26-11-2005 à 18:55:07    

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
Reply

Sujets relatifs:

Leave a Replay

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