3 votes

Comment tuer le processus/enfant ou l'onglet de Firefox à partir de Java/C++

J'ai mon application en Java qui invoque un navigateur [IE ou Firefox, etc.]...

La condition est que lorsque mon application Java se termine, je dois fermer toutes les pages Web [processus enfants] que j'ai ouvertes à partir de mon application dans IE/Firefox, etc...

J'utilise le code suivant.

Note : cmd contient "le chemin d'accès de l'exécutable du navigateur système et l'URL"

static ArrayList pro = new ArrayList();
 String cmd=" "; 
 Process p = Runtime.getRuntime().exec(cmd);
 pro.add(p);

Je maintiens une ArrayList statique pour ajouter tous les objets de processus.

Pour tuer le processus que j'ai invoqué, j'utilise le code suivant

Iterator iter = pro.iterator();
 while(iter.hasNext()){
 Process p = iter.next();
 System.out.println("Maintenant en train de tuer "+p.toString());
 p.destroy();
 }

Ce code[p.destroy();] fonctionne bien pour Internet Explorer, mais ne fonctionne pas pour Firefox/Chrome...

Étant donné que Firefox s'exécute en tant que processus principal et que le processus que j'invoque devient son enfant :(...

Je dois utiliser une solution générique pour Windows et Linux..

Je peux même opter pour une correction de fichier C++ qui fait cela avec certains critères de recherche.. afin que je puisse exécuter cet exécutable à partir de mon code en utilisant

Runtime.getRuntime().exec("cmd exécutable");

1voto

web-nomad Points 3632

Sous Windows, vous pouvez exécuter :

wmic process get description, executablepath, processid | findstr firefox

ce qui vous donnera le PID du processus Firefox. Ensuite, vous pouvez utiliser tskill PID pour arrêter le processus.

0voto

AlexR Points 60796

Bonne question.

Il existe plusieurs solutions.

La première est la suivante. Exécutez le navigateur non directement mais en utilisant un script (shell pour Unix, fichier bat pour Windows) qui vous indiquera l'ID du processus du navigateur qu'il exécute. Ensuite, utilisez kill -9 PID sur Linux et taskkill sur Windows. Cette solution nécessitera que vous écriviez des scripts pour différentes plates-formes (au moins pour 2).

Mais j'ai une autre suggestion. Si l'URL que vous ouvrez dans le navigateur vous appartient (je veux dire que vous pouvez ajouter du javascript), vous pouvez faire ce qui suit. L'URL que vous ouvrez créera un appel AJAX au serveur. Lorsque vous fermez votre application, vous devez dire au serveur d'envoyer une commande au navigateur pour le fermer. À ce moment-là, le javascript qui s'exécute dans le navigateur fermera sa fenêtre. C'est la solution la plus interopérable.

BTW Je pense que le serveur utilisé par le composant AJAX mentionné peut être votre propre application. Et le signal que vous envoyez au composant AJAX n'est qu'une erreur de connexion. En réalité, si votre application est le serveur et que vous le fermez, l'appel AJAX échouera. Cela signifie à 100% que le navigateur doit également être fermé.

0voto

Ocean Points 1834

Essayez d'utiliser la commande pkill (tuer par nom de processus).

Runtime.getRuntime().exec("pkill firefox");

ou en c++

system("pkill firefox");

Mais ce n'est pas indépendant de la plate-forme. Cela fonctionnera sur un système d'exploitation de type Unix, et pas sur Windows.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X