Ouvrir et fermer des applications avec Processing

J'arrive à ouvrir plusieurs applications Processing avec ce code :

void setup() {
size(200, 200);
}

void draw() {

String[] params1 = {"/Volumes/appli_1.app" };
open(params1);

String[] params2 = {"/Volumes/appli_2.app" };
open(params2);

}

Par contre pour les fermer c'est pas la joie... le seul truc qui marche, c'est ce code :

String[] params = { "killall","JavaApplicationStub" };
exec(params);

Malheureusement en procédant de cette façon, toutes les applications Processing sont arrêtées.
Et j'aimerais que l'application "Maitre" puisse subsister ( celle qui permet d'ouvrir et fermer les process et qui contrôle si les autres ne sont pas plantées).

J'aimerais également que cela fonctionne sous Mac, Windows et Linux (quitte à compiler trois méthodes différentes).

Est ce que quelqu'un aurait une solution ?

La piste que je privilégie est la ligne de commande.

En tapant 'jps' dans la console (toutes plateformes, c'est du Java Virtual Machine ;)), on sort les PID des processus Java en cours.

Par contre je n'ai pas trouvé comment avoir les nom des processus et comment les transmettre a l'application Processing.

Autrement la commande 'ps -l' me sort tout les processus en cours... donc ça fait beaucoup à trier.

J'avance un peu.

Avec la ligne de commande :

ps ax | grep "JavaApplicationStub"

J'ai le PID et le path et le nom des applications Processing.

Maintenant il faut faire passer ces infos à l'appli Processing...

Bon...

Avec cette ligne de commande:

ps ax | grep "JavaApplicationStub" > /Volumes/Test.txt

J'écris dans le fichier test les sorties de la console, je n'ai plus qu'à lire le contenu du fichier avec mon application pour connaitre le PID des autres applications Processing et les "killer".

Pour Mac ça devrait marcher.... maintenant, Windows et Linux... une idée ? :wink:

Pour linux, ça marche aussi. Un petit kill et au revoirs l'appli ...
Par contre, le chemin vers Test.txt n'est pas valable sous environnement GNU/Linux, mais peut etre remplacé par "${HOME}/Test.txt "

Merci pour l'info, ce fichier test.txt devrait se trouver sur une clé USB.

Pour l'instant je n'arrive pas à trouver la syntaxe qui permet d'écrire ce !@#$!@ de fichier "test" ;D

Tu as essayé de l'ecrire a coup de echo ?

Est ce que tu peux développer ? :slight_smile:

Autrement j'ai trouvé une librairie qui s'appelle "Napplet" qui permettrait de faire du multi-thread (avec setup et draw séparés), reste à voir si je peux arréter les processus par le code principal.

J'ai une solution un peu barbare, je fais un shell dans un fichier executable.

#!/bin/bash
ps ax | grep "JavaApplicationStub" > /Volumes/Test.txt

Le seul problème qui subsiste c'est que j'ai une console qui s'ouvre à chaque appel et qui reste ouverte.

En rajoutant ça a la fin du shell, le terminal se ferme :

osascript -e 'tell application "Terminal"
set nb to count of windows
if nb > 1 then close first window
if nb <= 1 then quit
end tell' &

Mais ça marche uniquement sur Mac.

Si quelqu'un peut me décrire comment lire le PID et l'écrire sur les autres plateformes ce sera le bienvenu. :wink:

Pour Windows, il y a les outils sysinternals :
Pour le PID, c'est PSList : http://www.microsoft.com/france/technet/sysinternals/ProcessesAndThreads/PsList.mspx
Pour tuer un processus, c'est PSKill : http://www.microsoft.com/france/technet/sysinternals/ProcessesAndThreads/PsKill.mspx

Pour contre, pour le monde Unix, la commande ne diffère pas de mac : ps ax | grep "JavaApplicationStub" > /Volumes/Test.txt
Il faut juste mettre à la place le chemin qui t'intéresse. Si tu montes ta clé USB dans /mnt/USBkey, ça donnera : ps ax | grep "JavaApplicationStub" > /mnt/USBkey/Test.txt

Merci pour ces infos :slight_smile: