Comment tuer les processus / tabs de firefox à partir de Java / C ++

J’ai mon application en Java qui appelle un navigateur [IE ou Firefox etc] ..

La condition est lorsque mon application Java se termine, je dois tuer toutes les pages Web [processus enfants] que j’ai ouvertes depuis mon application dans IE / Firefox, etc.

J’utilise le code suivant.

Remarque: cmd contient “le chemin d’access et l’URL du navigateur système”

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

Je maintiens un arraylist statique pour append tous les objects de processus.

Pour tuer le processus que j’ai appelé, j’utilise le code ci-dessous

 Iterator iter = pro.iterator(); while(iter.hasNext()){ Process p = iter.next(); System.out.println("Now Killing "+p.toSsortingng()); p.destroy(); } 

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

Depuis que Firefox est exécuté en tant que processus principal et que le processus que j’appelle devient son enfant: (…

Je dois utiliser un correctif générique pour Windows et Linux ..

Je peux même aller chercher un correctif de fichier C ++ qui fait cela avec quelques critères de recherche ..si que je peux exécuter cet exécutable à partir de mon code en utilisant

Runtime.getRuntime (). Exec (“exécutable cmd”);

Dans Windows, vous pouvez exécuter:

wmic process get description, executablepath, processid | findstr firefox

qui vous donnera le PID du processus firefox. Ensuite, vous pouvez utiliser tskill PID pour tuer le processus.

Bonne question.

Il y a plusieurs solutions.

Le premier est le suivant. N’exécutez pas le navigateur directement, mais utilisez un script (shell pour Unix, fichier bat pour Windows) qui vous indiquera l’ID de processus du navigateur qu’il exécute. Ensuite, utilisez kill -9 PID sur Linux et taskkill sur Windows. Cette solution vous obligera à écrire des scripts pour différentes plates-formes (à la liste pour 2).

Mais j’ai une autre suggestion. Si l’URL que vous ouvrez dans le navigateur vous appartient (je veux dire, vous pouvez y append du javascript), vous pouvez procéder comme 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 la fermer. En ce moment, le javascript qui tourne dans le navigateur va fermer sa fenêtre. C’est la solution la plus multi-plateforme.

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

essayez d’utiliser la commande pkill (élimination par nom de processus).

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

ou en c ++

 system("pkill firefox"); 

Mais ce n’est pas indépendant de la plateforme. Il fonctionnera sur un système d’exploitation de type Unix, et non sous Windows.