Détacher un processus Java du Shell - Java - Programmation
Marsh Posté le 16-11-2005 à 15:02:36
Relis calmement ce que tu as écris, et tu verras que c'est une bête boucle infinie. Il n'y a rien dans ton code qui soit susceptible de "détacher" ton thread.
Relis bien aussi l'exemple qui est donné dans l'url, tu verras qu'il te manque des choses pour arriver à ce que tu veux, en particulier la méthode "daemonize".
Marsh Posté le 16-11-2005 à 15:04:27
c'est joli tout ça mais c'est loin d'être assez, surtout avec les histoires de leader de session
Marsh Posté le 16-11-2005 à 15:08:19
si t'utilise bash, j'utiliserais au moins
machin & disown
Marsh Posté le 17-11-2005 à 03:28:30
J'ai bien tout lu post_it... et la fameuse méthode daemonize est composée uniquement des deux lignes qui ferment les flux de sortie du shell, celle qu'il ajoute ultérieurement ne fait qu'effacer le fichier contenant le pid à la fermeture de la jvm. Et OUI c'est une boucle infinie, c'est bien le but. Je pense que tu devrais lire la fameuse page.
Taz > dans l'exemple il n'utilise que &. En fait c'est sensé rendre la main lorsqu'il se détache du sous-shell dans le script (ici le vrai programme):
|
Mon problème est qu'il ne sort jamais de la procédure launch(), contrairement à ce qui est décrit dans la page, et le programme tourne bien et a bien appelé daemonize (il entre alors dans une boucle infinie sur un autre thread, faisant server xmlrpc). Alors oui j'utilise jython, mais ma méthode daemonize est ainsi:
|
En ajoutant disown, ça ne change pas le résultat, il reste bloqué dans le sous-shell. Quand il est bloqué, depuis un autre shell:
$ ps -ef | grep java |
Merci pour les réponses.
Marsh Posté le 17-11-2005 à 03:32:11
Une autre précision: j'utilise & disown maintenant. Je le lance, il est bloqué, je le CTRL-C. Je regagne la main, et il est toujours actif. J'essaie de me délogger, et là ça bloque.
$ ./builder.sh -d |
Et putty en reste là, sans se fermer. Le ps -ef sur l'autre shell me donne le processus toujours en train de tourner.
Edit: j'utilise effectivement bash, j'ai oublié de préciser.
Marsh Posté le 17-11-2005 à 09:45:00
ReplyMarsh Posté le 17-11-2005 à 14:57:26
Parce que nohup te détache immédiatement du parent et redirige les entrées sorties vers des fichiers. Je voudrais garder la main le temps que mon code d'initialisation soit finit, et seulement une fois que tout s'est bien passé passer en mode détaché. Mais bon si j'y arrive pas je vais bien finir par y passer avec un bête message dans le log quand ça plante. Quant à screen je connaissais pas, mais ça n'a pas l'air de répondre à ce besoin. Par contre ça a l'air bien sympa, merci de l'avoir mentionné
Marsh Posté le 18-11-2005 à 00:15:20
je me quote à propos du double-fork
Citation : c'est aussi parce que : |
Marsh Posté le 16-11-2005 à 12:41:12
Hello, j'aimerais faire comme dit ici, pour détacher son processus d'un shell on-the-fly: http://pezra.barelyenough.org/blog [...] va-daemon/ . Malheureusement, mon processus ne se détache pas du shell. Des idées ? Merci.
Test:
public class A
{
public static void main(String[] args)
{
System.out.close();
System.err.close();
while(true)
{
try{Thread.sleep(50);}
catch(Exception e) {}
}
}
}
Résultat:
$ java -cp . A
detaching...
Et ça rend pas la main. Testé sous debian.