Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3348 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Faire dépendre un processus d'un autre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Faire dépendre un processus d'un autre

n°1597847
zeaurelien
Posté le 09-08-2007 à 17:00:20  profilanswer
 

Bonjour.
Je cherche à faire dépendre l'exécution de 3 exécutables windows (.exe) de la présence d'un 4e exécutable.
L'ordre de lancement importe peu mais il faudrait que si le dernier .exe est fermé tous les autres .exe le soient.
 
En gros pour faire une analogie shell Unix j'aurai besoin d'un truc du genre :
 
#!/bin/bash
process1.exe &
process2.exe &
process3.exe &
process4.exe
exit
 
Est ce que quelqun sait faire ca au travers d'un .VBS ou d'un .CMD / .BAT ?
 
Merci beaucoup :)

mood
Publicité
Posté le 09-08-2007 à 17:00:20  profilanswer
 

n°1598122
jpcheck
Pioupiou
Posté le 10-08-2007 à 12:27:58  profilanswer
 

salut, dans ton raisonnement, tu cherches juste à tester l'ouverture de process ? ou bien est-ce plus perfide que ca ? :p

n°1598210
zeaurelien
Posté le 10-08-2007 à 14:59:41  profilanswer
 

Non le process4 a besoin des 3 autres (qu'ils soient lancés avant ou après importe peu) mais je ne veux pas que les 3 premiers process continuent à tourner après la fermeture du process4 .
 
Comme il s'agit d'applications qui tourneront sous Citrix il y aura de nombreux process de ce type lancés par différents utilisateurs, je ne peux donc pas faire un kill des 3 process en fonction de leur nom sous peine de shooter des process appartenant à quelqun d'autre.

n°1598302
jpcheck
Pioupiou
Posté le 10-08-2007 à 16:27:45  profilanswer
 

et ces 3 process, c toi qui les lance non ? tu passes pas par un x = shell() ? tu kill just le x... non ?

n°1598794
zeaurelien
Posté le 13-08-2007 à 08:33:42  profilanswer
 

Il faudrait que tous les process soient lancés par un .bat.
Mon soucis c'est que je ne sais pas attacher des process à un cmd.exe tout en rendant la main au cmd.exe pour lancer un autre process.
 
C'est par contre très facilement faisable sous bash (comme le montre l'exemple que j'ai donné plus haut et qui fait exactement ce que je veux) en utilisant un "&" à la fin de la commande : le process lancé est rattaché au bash mais rend la main, et en cas de fermeture du bash les process sont arretés.

n°1599685
zeaurelien
Posté le 15-08-2007 à 08:01:46  profilanswer
 

Une idée ?

n°1600271
Xpif
Posté le 17-08-2007 à 03:38:45  profilanswer
 

peut etre qu'un fichier toto.bat avec dedans
start process1.exe
start process2.exe
...
...
 
pourrait t'aller

n°1600284
zeaurelien
Posté le 17-08-2007 à 08:19:38  profilanswer
 

Le soucis avec le start c'est les process sont lancés de façon indépendante et ne sont pas rattachés au CMD.EXE qui les lance. Donc quand le CMD.EXE est arreté les applications restent ouverte...

n°1600373
ju65
Posté le 17-08-2007 à 12:16:25  profilanswer
 

Je ne sais pas si tes process ont besoin de continuer à tourner pendant que le 4 eme tourne aussi.
Parce que sinon tu peux faire avec la commande start /W
 
start /W process1.exe
start /W process2.exe
start /W process3.exe
start /W process4.exe
 
Le problème c'est qu'il vont s'exécuter toujours dans le même ordre et les uns à la suite des autres.
Faut voir si c'est possible dans ton cas ...

n°1600498
zeaurelien
Posté le 17-08-2007 à 16:39:05  profilanswer
 

Malheureusement le process4 a besoin que les 3 autres tournent donc ca ne convient pas...
 
J'ai essayé de faire ca en VBS mais ca n'a pas l'air très probant non plus...

mood
Publicité
Posté le 17-08-2007 à 16:39:05  profilanswer
 

n°1600529
ju65
Posté le 17-08-2007 à 17:53:09  profilanswer
 

Code :
  1. import java.applet.* ;
  2.  
  3.       import java.awt.* ;
  4.  
  5.       import java.io.*;
  6.       public class Exec
  7.       {
  8.        public static void main(String[] args)
  9.  
  10.        {
  11.          try
  12.          {
  13.  
  14.            Runtime r = Runtime.getRuntime();
  15.            Process p1 = r.exec("c:\\windows\\notepad.exe" );
  16.            Process p2 = r.exec("c:\\windows\\notepad.exe" );
  17.            Process p3 = r.exec("c:\\windows\\notepad.exe" );
  18.            Process p4 = r.exec("c:\\windows\\notepad.exe" );
  19.        //Test si le Process 4 est terminé
  20.            if (p4.waitFor()==0)
  21.            {
  22.           p1.destroy();
  23.           p2.destroy();
  24.           p3.destroy();
  25.              System.out.println("termine" );
  26.            }
  27.  
  28.          }
  29.          catch(Exception e)
  30.  
  31.          {
  32.            System.out.println("erreur d'execution " );
  33.  
  34.          }
  35.  
  36.         }
  37.  
  38.       }


 
Je te propose ca. Bon c'est du Java certes mais tu peux tjrs en faire un executable. Je n'ai testé qu'en lançant 4 process de notepad mais ca ma l'air de marcher.
Quand le process 4 est terminé (fermer la fenêtre notepad) les autres process sont killés.
Après ce n'est pas très propre vu qu'il n'y a aucun test mais c'est un début de solution peut-être pour toi.


Message édité par ju65 le 17-08-2007 à 23:25:16
n°1600630
zeaurelien
Posté le 18-08-2007 à 08:45:01  profilanswer
 

Je vais tester ca au boulot lundi, mais à vue de nez ca a l'air de correspondre à ce que je cherchais !
Merci beaucoup ju65

n°1600674
ju65
Posté le 18-08-2007 à 13:46:12  profilanswer
 

De nada  :D  

n°1600952
zeaurelien
Posté le 20-08-2007 à 10:17:18  profilanswer
 

Ca marche parfaitement et la solution convient tout à fait à mon besoin.
Merci à toi !

n°1601075
ju65
Posté le 20-08-2007 à 13:55:59  profilanswer
 

Parfait alors  :)  

n°1601079
Taz
bisounours-codeur
Posté le 20-08-2007 à 14:05:25  profilanswer
 

ça fait plaise de faire une daube en java rien que pour ça

n°1601098
zeaurelien
Posté le 20-08-2007 à 14:40:29  profilanswer
 

Taz a écrit :

ça fait plaise de faire une daube en java rien que pour ça


Si tu sais faire la même chose en VBS ou avec un .BAT je suis interessé hein, dans le cas contraire tu as perdu l'occasion de passer à coté d'une réflexion déplacée.

n°1601148
MagicBuzz
Posté le 20-08-2007 à 15:15:31  profilanswer
 

le coup du bat qui lance les 4 process, c'est suffisant : dès que la fenêtre du bat est shootée (donc à la fermeture du client citrix) le cmd ouvert va butter de sang froid tout ce qu'il avait lancé.
 
j'ai le problème avec un batch de backup d'un ERP...
 
le batch arrête l'erp, fait le backup, puis le redémarre... sauf que si un con ferme la fenêtre "ne surtout pas toucher.bat" bah ça coupe le serveur d'un coup :D
 
autre exemple, cette fois pour le client du même ERP :


@echo off
 
echo ###############
echo # GENERIX.BAT #
echo ###############
echo.
echo # V5.2-00
echo.
echo Veuillez attendre que cette fenetre se ferme toute seule
echo lorsque vous aurez fini de travailler avec Generix.
echo.
exe\u_net.exe > msg.log
exe\u_ipc.exe detruire spvr * > msg.log
exe\u_net.exe > msg.log
start /wait exe\menunt.exe > msg.log
exe\u_net.exe > msg.log
exe\u_ipc.exe detruire spvr * > msg.log
com\utils\sleep.exe 2 > msg.log
exe\u_net.exe > msg.log
exit


 
analogiquement tu devrait faire :


@echo off
process1.exe
process2.exe
process3.exe
start /wait process4.exe
exit


 
=> Ca lance les 3 premiers process.
=> Ca lance le 4 et ça reste en pause tant qu'il tourne.
=> Dès qu'il s'arrête, cmd s'arrête et s'occupe de virer tout ce qu'il a démarré.

Message cité 1 fois
Message édité par MagicBuzz le 20-08-2007 à 15:17:54
n°1601175
zeaurelien
Posté le 20-08-2007 à 15:33:31  profilanswer
 

Dans mon cas de figure les 3 .EXE qui doivent être "liés" à la présence du 4e ne rendent pas la main au CMD.EXE quand ils sont lancés : si j'applique ce que tu dis il ne lance que le 1er, le 2e est lancé à la fermeture du 1e et le 3e à la fermeture du 2e.
Donc dans ton cas pas de soucis mais dans le mien ce n'est pas exploitable.
Enfin le programme en Java faisant exactement ce que je veux ce n'est plus très grave :)
 

MagicBuzz a écrit :

le coup du bat qui lance les 4 process, c'est suffisant : dès que la fenêtre du bat est shootée (donc à la fermeture du client citrix) le cmd ouvert va butter de sang froid tout ce qu'il avait lancé.
 
j'ai le problème avec un batch de backup d'un ERP...
 
le batch arrête l'erp, fait le backup, puis le redémarre... sauf que si un con ferme la fenêtre "ne surtout pas toucher.bat" bah ça coupe le serveur d'un coup :D
 
autre exemple, cette fois pour le client du même ERP :


@echo off
 
echo ###############
echo # GENERIX.BAT #
echo ###############
echo.
echo # V5.2-00
echo.
echo Veuillez attendre que cette fenetre se ferme toute seule
echo lorsque vous aurez fini de travailler avec Generix.
echo.
exe\u_net.exe > msg.log
exe\u_ipc.exe detruire spvr * > msg.log
exe\u_net.exe > msg.log
start /wait exe\menunt.exe > msg.log
exe\u_net.exe > msg.log
exe\u_ipc.exe detruire spvr * > msg.log
com\utils\sleep.exe 2 > msg.log
exe\u_net.exe > msg.log
exit


 
analogiquement tu devrait faire :


@echo off
process1.exe
process2.exe
process3.exe
start /wait process4.exe
exit


 
=> Ca lance les 3 premiers process.
=> Ca lance le 4 et ça reste en pause tant qu'il tourne.
=> Dès qu'il s'arrête, cmd s'arrête et s'occupe de virer tout ce qu'il a démarré.


 
 

n°1601187
MagicBuzz
Posté le 20-08-2007 à 15:47:39  profilanswer
 

bourdel :o
 
tu colles un start devant process1.exe, process2.exe et process3.exe alors :o

n°1601189
MagicBuzz
Posté le 20-08-2007 à 15:48:14  profilanswer
 

bouffer 500 Mo de JVM par session utilisateur juste pour lancer une bouse qui démarre 4 programmes :o
va pas durer longtemps ton citrix :sweat:

Message cité 1 fois
Message édité par MagicBuzz le 20-08-2007 à 15:48:27
n°1601206
zeaurelien
Posté le 20-08-2007 à 16:01:40  profilanswer
 

MagicBuzz a écrit :

bourdel :o
 
tu colles un start devant process1.exe, process2.exe et process3.exe alors :o


 
Avec un start devant à la fin de l'exécution du .bat les process ne sont pas tués

n°1601208
zeaurelien
Posté le 20-08-2007 à 16:03:05  profilanswer
 

MagicBuzz a écrit :

bouffer 500 Mo de JVM par session utilisateur juste pour lancer une bouse qui démarre 4 programmes :o
va pas durer longtemps ton citrix :sweat:


 
Ca bouffe 20 Mo de mémoire (physique + virtuelle), sur 16 Go de RAM ca ne devrait pas être trop genant (surtout que cette appli est peu utilisée) :)

n°1601226
Taz
bisounours-codeur
Posté le 20-08-2007 à 16:14:28  profilanswer
 

ouais enfin c'est quand même complètement overkill. Tu peux aussi faire une VM qui va faire un appel RPC pour lancer l'opération

n°1601328
lombrusco
Posté le 20-08-2007 à 17:56:57  profilanswer
 

juste par curiosité et si c'est pas trop indiscret c'était pour quoi que t'avais besoin de faire ce bat (enfin un prog java maintenant :p) ?

n°1601424
ju65
Posté le 20-08-2007 à 21:19:25  profilanswer
 

Bon ok mon prog est lourd j'avoue  :) . Mais bon je ne vois toujours pas d'autre proposition pour l'instant plus légère. J'attends voir comment vous faites ça en .bat ou autre ...
 
 

n°1601454
MagicBuzz
Posté le 20-08-2007 à 22:54:05  profilanswer
 

Ben déjà tu peux le faire en VBS, ça évite d'avoir une JVM en mémoire pour rien... WSH est de toute façon loadé par le système et est quand même bien plus light que Java.

n°1601460
ju65
Posté le 20-08-2007 à 23:06:22  profilanswer
 

MagicBuzz a écrit :

Ben déjà tu peux le faire en VBS, ça évite d'avoir une JVM en mémoire pour rien... WSH est de toute façon loadé par le système et est quand même bien plus light que Java.


 
Oui oui c'est sur que la JVM en mémoire ... c'est pas nécessaire pour un prog comme ça.  
J'ai été à la solution la plus rapide, c'était surtout pour aider notre cher ami zeaurelien.  
Mais finalement je trouve ca plutôt intéressant  :D  j'vais essayer de voir du côté d'autres langages pour réaliser ça autrement ... quand j'aurais 5 minutes ^^

n°1601484
MagicBuzz
Posté le 21-08-2007 à 00:02:43  profilanswer
 

Ben en gros, tu modifies ton code à la sauce VB et c'est pareil ;)
 

Code :
  1. Option Explicit
  2.  
  3. Dim WShell
  4. Dim p1, p2, p3
  5.  
  6. Set WShell = CreateObject("WScript.Shell" )
  7.  
  8. ' Démarrage des 3 programmes en assynchrone
  9. Set p1 = WShell.Exec("notepad" )
  10. Set p2 = WShell.Exec("notepad" )
  11. Set p3 = WShell.Exec("notepad" )
  12.  
  13. ' Exécution du 4 et attente de la fin de ce dernier
  14. Call WShell.Run("calc",,true)
  15.  
  16. ' Arrêt des trois premiers
  17. p1.Terminate()
  18. p2.Terminate()
  19. p3.Terminate()
  20.  
  21. MsgBox("Terminé" )


Message édité par MagicBuzz le 21-08-2007 à 00:08:43
n°1601486
ju65
Posté le 21-08-2007 à 00:20:17  profilanswer
 

Oué d'accord c'était tout simple en fait. Lors de ma recherche initiale j'avais + opté pour un truc du genre WaitFor(). et la recherche dans les fonctions associées aux processus. C'est vrai qu'avec WShell c'est super simple.  :)  
Bien joué MagicBuzz

n°1601622
zeaurelien
Posté le 21-08-2007 à 10:31:22  profilanswer
 

Décidément je suis gaté, MagicBuzz ta solution en VBS marche effectivement très bien.
Merci à vous deux, à ju65 pour avoir débloqué un soucis que j'avais en production (le critère N° était sur le coup d'avoir un truc rapidement fonctionnel) et à MagicBuzz pour avoir une solution plus "propre".
:)

n°1601919
MagicBuzz
Posté le 21-08-2007 à 19:20:37  profilanswer
 

ceci dit, ça doit se faire en bat aussi... mais là c'est vrai que je sèche un peu, pis c'est pas super documenté...
 
faudrait trouver un vieux au fond de sa caverne avec du MSDOS moussu sur les épaules, il pourrait peut-être nous dire.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Faire dépendre un processus d'un autre

 

Sujets relatifs
Fermeture de processus AccessTaille de processus - optimisation.
Accéder memoire d'un processusaccélérer le processus xsl
[VBS] Stopper un processus avec un script VBS[Résolu]Gestion des processus par le systeme d'exploitation ...
proc_open : arreter le processus avant la fin du script phpProcessus métier et règle métier ? c'est quoi la différence ?
Connaitre heure d'ouverture d'une processusComment appeler un processus déjà résident ?
Plus de sujets relatifs à : Faire dépendre un processus d'un autre


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)