Gambas France BETA


Pas de compte ? Incription

tuer un logiciel gb3 et le relancer...

1
AuteurMessages
spheris#1 Posté le 15/11/2016 à 23:38:14
Ce sujet a été traité mais une petite différence cependant.
2 logiciels GB3 tournent sur mon PC.
Comment le premier nommé A.gambas peut il relancer le second B.gambas à intervalle régulier toutes les 1000secondes par exemple.
C'est juste pour essayer.
Un timer decompte et quand il passe à 0, je lance la fonction redemarrer.
Je n'arrive pas a capturer l'ID de mon programme nommé B.gambas.
1
application.id
me renvoi l'ID de mon programme A.gambas
Merci pour vos réponses.
;)
vuott#2 Posté le 16/11/2016 à 02:32:57
Ne cedere ineluctabili possimusSi tu lances le programme b.gambas avec "Shell", tu dois utiliser la Classe Process.


Exemplum simplex:


Code programme "a.gambas"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
PRIVATE tempus AS Timer


PUBLIC SUB Main()

WITH tempus = NEW Timer AS "Tempus"
.Delay = 2000 ' Le timer on active chaques 2 secondes.
.Start
END WITH

END


PUBLIC SUB Tempus_Timer()

DIM pr AS Process

pr = SHELL "/emplacement/du/programme/b.gambas" ' Lance un nouveau programme "b.gambas"

PRINT "Num. Process: "; pr.Id ' Nous voyons le numéro du procès du programme "b.gambas"

pr.Kill ' Il tue le procès du programme "b.gambas"

END



Code programme "b.gambas"
1
2
3
4
5
PUBLIC SUB Main()

PRINT "Tempus regit actum !"

END
spheris#3 Posté le 16/11/2016 à 07:54:41
Merci vuot, mais cela ne fonctionne pas.
En effet, si je fais un "top" dans le terminal, je ne vois pas mon appli gambas mais 2 "gbr3" lancé.
cela tue un process et en relance un mais je ne vois pas mon logiciel s'éteindre et se redémarrer.
;)
vuott#4 Posté le 16/11/2016 à 16:51:47
Ne cedere ineluctabili possimusJe croyais avoir compris que le programme de Gambas A ne doit pas être fermé. :|
didier18#5 Posté le 16/11/2016 à 18:08:49
Bonjour spheris

En fait tu veux un programme type 'rebond' ?
Voici quelques sources qui semblent correspondre à ce que tu veux (bon ok, faudra que tu fasses quelques adaptations pour ton besoin perso)...
Pour les variables j'ai fait:
1
2
3
4
' Gambas class file
PUBLIC $sNumPID2 AS STRING 'est le numéro du pid
PUBLIC $NomApp AS STRING = Application.Title 'le nom de l'application (par exemple ton projet s'appel rebond)
PUBLIC FichIni AS File 'fichier d'initialisation

Ensuite à l'ouverture du Form...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PUBLIC SUB Form_Open()
'on créé le fichier rebond.pid (il vaut mieux le mettre dans le user.home (droit d'accès par rapport aux autres distros.))
FichIni = OPEN User.Home &/ $NomApp & ".pid" FOR CREATE 'ouvre un nouveau fichier"
PRINT #FichIni, "[Pid actuel]" 'écrit l'étiquette
SHELL "pidof -s gbr3 /usr/bin/" & $NomApp & ".gambas" TO $sNumPID2 'renvoie le pid actuellement utilisé"
PRINT #FichIni, "gbr3 /usr/bin/" & $NomApp & ".gambas = " & $sNumPID2 'écrit la valeur du pid dans le fichier User.Home &/ $NomApp & ".pid" (rebond.pid)
CLOSE #FichIni 'on ferme le fichier
ME.Refresh
'on vérifie si le programme appelant a été fermé.il vaut mieux le mettre dans le user.home (droit d'accès par rapport aux autres distros.
'normalement le fichier contenant le pid ne DOIT PAS exister...
'sinon le programme n'est pas fermé ou il n'a pas été fermé correctement (arrêt intempestif)
IF NOT Exist(User.Home & "/Monprogramme.pid") THEN 'si Monprogramme.pid n'existe pas c'est que Monprogramme est fermé...
SHELL "/usr/bin/Monprogramme.gambas" 'donc on relance l'exécutable Monprogramme.gambas
ME.Close 'puis on quitte
ENDIF
END

Et quand le Form se ferme...
1
2
3
PUBLIC SUB Form_Close() 'quand le formulaire est en cours de fermeture
TRY KILL User.Home &/ $NomApp & ".pid" 'on supprime le fichier User.Home &/ $NomApp & ".pid" (rebond.pid)
END


En pas à pas tu verras 2 fichiers (rebond.pid et Monprogramme.pid) avec leur n° pid.
Bien sur à la fermeture de Monprogramme, il faudra détruire Monprogramme.pid qui aura été créé dans le user.home...
J'espère que ça t'aidera...

Bonne journée.
1