Java programme stdout et se détacher de premier plan

J’ai un programme java, disons Test.class.

Lorsque j’exécute java Testez le programme, demandez un mot de passe et continuez.

Le problème est que le stdout est redirigé vers un journal et le programme est lancé avec le & (nous sums sur UNIX).

Comment puis-je interagir avec ce programme lancé java Test & avec stdin et stdout?

Une solution possible consiste à démarrer le programme au premier plan, puis à l’exécuter en arrière-plan depuis Java.

Merci!

Si le programme peut lire le mot de passe de stdin, vous pouvez demander à un script Unix de le saisir, puis de lancer l’application Java et de lui transmettre le mot de passe, par exemple:

echo $PASSWORD | java Test >log.out & 

Ou vous pouvez envisager de diviser votre application Java en deux parties; Il pourrait y avoir une partie “frontale” interactive qui valide le mot de passe, puis une fois le mot de passe validé, cela pourrait lancer une partie “back-end” en tant que processus d’arrière-plan et quitter.

Une option consiste à diriger l’entrée vers votre programme en utilisant echo s comme:

 (echo input1 echo input2 .... ) | java Test >& logfile & 

Si le nombre d’entrées est important, vous pouvez également placer vos entrées dans un fichier et redirect le contenu du fichier comme suit:

 < input_file java Test >& logfile & 

Je ne vois rien de Java spécifique dans cette question, si vous voulez piloter le stdin en fonction de la sortie de l’application, vous pouvez utiliser l’utilitaire Expect: http://en.wikipedia.org/wiki/Expect

Attention cependant, Expect est notoirement fragile, vous feriez bien de ne pas l’utiliser dans les scénarios de production.

En fait, si vous voulez seulement pouvoir entrer le mot de passe, vous pouvez peut-être essayer de lancer votre application en avant-plan (sans les balises &).

Ensuite, après avoir entré le mot de passe, appuyez sur Ctrl + Z ou dans un autre shell, kill -SIGSTP afin de suspendre votre programme. Enfin, tapez bg pour le mettre en arrière-plan.

Lisez les documents sur la fonctionnalité de contrôle des tâches de votre shell pour plus de détails.