Stopper un programme lancé en ligne de commande ?

Stopper un programme lancé en ligne de commande ? - C++ - Programmation

Marsh Posté le 18-04-2003 à 09:30:27    

Bonjour, j'ai ecris un programme c++ qui se lance via ligne de commande (ms dos et unix). Donc pas d'interface graphique. J'ai une boucle while qui tourne pour l'instant sans arret. Mais j'aimerais pouvoir arreter ce programme proprement a n'importe quel moment (si j'avais une interface graphique, j'aurais placer un bouton "stop" et le tour etait joué !). Comment faire ?
 
Merci.

Reply

Marsh Posté le 18-04-2003 à 09:30:27   

Reply

Marsh Posté le 18-04-2003 à 09:33:13    

poste ton code. (sinon Ctrl+c ca marche :D)

Reply

Marsh Posté le 18-04-2003 à 09:34:35    

bezot3 a écrit :

Bonjour, j'ai ecris un programme c++ qui se lance via ligne de commande (ms dos et unix). Donc pas d'interface graphique. J'ai une boucle while qui tourne pour l'instant sans arret. Mais j'aimerais pouvoir arreter ce programme proprement a n'importe quel moment (si j'avais une interface graphique, j'aurais placer un bouton "stop" et le tour etait joué !). Comment faire ?
 
Merci.


ben ca depend de ce que tu veux faire soit c'est ctrl-c  :D  
ou alors tu peux demander a l'user de taper un touche definie a l'avance [:spamafote]
EDIT : c'est peut etre possible de lui demander de taper la touche esc => code ascii 27 si je me souviens bien


Message édité par polo021 le 18-04-2003 à 09:36:35
Reply

Marsh Posté le 18-04-2003 à 09:35:11    

kill -9 du processus ... :D
 
sous win, tu peux voir le prog en question ... Par contre, si tu le ferme dans le gestionnaire des tâches, ca risque fort de fermer aussi ta console ...


---------------
last.fm
Reply

Marsh Posté le 18-04-2003 à 09:37:45    

Si c'est au niveau prog que tu veux pouvoir quitter, il te faut effectivement gérer les actions de l'utilisateur via un getchar par exemple ...
 
Sous Linux, si tu as lancé ton prog en tâche de fond (je suppose que c'est son but), n'oublie pas de la remettre au premier plan du terminal ...


---------------
last.fm
Reply

Marsh Posté le 18-04-2003 à 10:06:29    

En gros, si j'ai dans mon code :
 
bool arret = false;
 
while ( ! arret) {
  //faire le boulot
}
 
J'aimerais que, suite à une action de l'utilisateur (a determiner), le programme soit capable de passer le bool arret a true (et ensuite, mon programme pourra se terminer proprement). C'est jouable ou pas ?

Reply

Marsh Posté le 18-04-2003 à 10:10:22    

bezot3 a écrit :

En gros, si j'ai dans mon code :
 
bool arret = false;
 
while ( ! arret) {
  //faire le boulot
}
 
J'aimerais que, suite à une action de l'utilisateur (a determiner), le programme soit capable de passer le bool arret a true (et ensuite, mon programme pourra se terminer proprement). C'est jouable ou pas ?


 
ben oui. soit tu fait un break dans ta boucle suite a l'action de l'user soit tu mets arret a true
y a aucun probleme
 
EDIT :  
printf("tapez escape pour terminer" )
while (true)
{
if (getchar()==27) //faut voir exactement comment ca fonctionne je me souviens plus tres bien
break();
}
 
ou alors  
printf("tapez escape pour terminer" )
while (!arret)
{
if (getchar()==27) //faut voir exactement comment ca fonctionne je me souviens plus tres bien
arret = true;
}
 
ca devrait passer sans probleme


Message édité par polo021 le 18-04-2003 à 10:15:19
Reply

Marsh Posté le 18-04-2003 à 10:18:43    

polo021 a écrit :


printf("tapez escape pour terminer" )
while (true)
{
if (getchar()==27) //faut voir exactement comment ca fonctionne je me souviens plus tres bien
break();
}


 
[:xp1700]
 
 
:lol:
 
Sinon, c'est vrai que dans l'idée, c'est ce qu'a dit Polo021 ... (je préfère la 2ème solution perso ...)


---------------
last.fm
Reply

Marsh Posté le 18-04-2003 à 10:20:23    


[:ddr555]
 
PS : je suis pour la deuxieme aussi

Reply

Marsh Posté le 18-04-2003 à 10:20:49    

theShOcKwAvE a écrit :


 
[:xp1700]
 
 
:lol:
 
Sinon, c'est vrai que dans l'idée, c'est ce qu'a dit Polo021 ... (je préfère la 2ème solution perso ...)


[:rofl]

Reply

Marsh Posté le 18-04-2003 à 10:20:49   

Reply

Marsh Posté le 18-04-2003 à 10:23:06    

Reply

Marsh Posté le 18-04-2003 à 10:26:35    


Ben quoi, t'aurais fait la même chose à ma place non ?
en tout cas tu t'es fait méchament [:quoted]

Reply

Marsh Posté le 18-04-2003 à 10:28:40    

backdafuckup a écrit :


Ben quoi, t'aurais fait la même chose à ma place non ?


maintenant que j'y pense ... OUI :D  

backdafuckup a écrit :


en tout cas tu t'es fait méchament [:quoted]


[:sisicaivrai]


Message édité par polo021 le 18-04-2003 à 10:31:04
Reply

Marsh Posté le 18-04-2003 à 10:32:07    

polo021 a écrit :


maintenant que j'y pense ... OUI :D  
 
[:sisicaivrai]


 
 
t'as de la chance, j'ai pas eu le temps de te re [:quoted]
 

Citation :


[:sisivraivrai]

Reply

Marsh Posté le 18-04-2003 à 10:39:45    

moi j'aurais plutot vu un moyen de capter le crtl + c ou un kill et de le gerer proprement pour fermer le programme.

Reply

Marsh Posté le 18-04-2003 à 10:41:54    

bezot3 a écrit :

moi j'aurais plutot vu un moyen de capter le crtl + c ou un kill et de le gerer proprement pour fermer le programme.


ou : "pourquoi faire simple quand on peut faire complique"

Reply

Marsh Posté le 18-04-2003 à 10:42:07    

Alors je connais pas la fonction pour transformer un code ascii en caractère (je m'en souviens plus) :  
 
mais

Code :
  1. if (caractere == "^C" )
  2. {
  3.    arret = true;
  4. }

Reply

Marsh Posté le 18-04-2003 à 10:42:24    

polo021 a écrit :


ou : "pourquoi faire simple quand on peut faire complique"


 :lol:  
[:plusun]

Reply

Marsh Posté le 18-04-2003 à 10:44:25    

backdafuckup a écrit :

Alors je connais pas la fonction pour transformer un code ascii en caractère (je m'en souviens plus) :  
 
mais

Code :
  1. if (caractere == "^C" )
  2. {
  3.    arret = true;
  4. }




[:ban]

Reply

Marsh Posté le 18-04-2003 à 10:48:59    


 
 :pfff:  
 
pourquoi ?
 
 
et puis d'abord  

Citation :

break();


 
[:ban]

Reply

Marsh Posté le 18-04-2003 à 10:52:52    


+1


---------------
last.fm
Reply

Marsh Posté le 18-04-2003 à 10:53:54    

ben parce que je pense que si tu essayes de capter le ctrl-c dans ton programme, ta fenetre dos sera deja fermee que ton programme aura pas encore reagit :p


Message édité par polo021 le 18-04-2003 à 10:54:24
Reply

Marsh Posté le 18-04-2003 à 10:54:08    

tain, pour une fois que j'essaie de répondre a une question...
:pfff:
 
Dites moi au moins pourquoi ?
 
edit : ah ok...  :pt1cable:  
quel con...


Message édité par backdafuckup le 18-04-2003 à 10:56:06
Reply

Marsh Posté le 18-04-2003 à 10:54:20    


 
Car si ce programme tourne comme un service NT (ou demon unix), alors je n'aurais pas la consolesous la main pour aller faire un ctrl+c ...

Reply

Marsh Posté le 18-04-2003 à 10:55:22    

backdafuckup a écrit :


Code :
  1. if (caractere == "^C" )
  2. {
  3.    arret = true;
  4. }




 
Euuuh ... Tu compares 'caractere' avec l'adresse de ta chaine qui contient 2 caractères : '^' et 'C' ... Si le Ctrl+C est affiché ^C, ca ne veut pas dire que tu peux faire la même chose dans du code ...
Effectivement, le Ctrl-C envoie un signal de fin de programme que le prog n'est pas obligé de respecter (contrairement au kill -9) ...


Message édité par theshockwave le 18-04-2003 à 10:56:38

---------------
last.fm
Reply

Marsh Posté le 18-04-2003 à 10:56:53    

oh ca va faut arreter maintenant....
me ridiculisez pas tant que ca...
ya des gens qui les lisent ces posts

Reply

Marsh Posté le 18-04-2003 à 10:59:00    

bezot3 a écrit :


 
Car si ce programme tourne comme un service NT (ou demon unix), alors je n'aurais pas la consolesous la main pour aller faire un ctrl+c ...


 
Sous NT, les services sont prévus pour dialoguer avec une interface graphique en générale (l'interface étant dans un autre exe ...) Donc tu peux creuser de ce côté là ...
 
Sinon, pour la gestion des messages du système, ca doit se faire assez facilement, mais mes cours de système se font bien vieux ...


---------------
last.fm
Reply

Marsh Posté le 18-04-2003 à 10:59:33    

theShOcKwAvE a écrit :


Effectivement, le Ctrl-C envoie un signal de fin de programme que le prog n'est pas obligé de respecter (contrairement au kill -9) ...

:heink:  
que veux tu dire par la?

Reply

Marsh Posté le 18-04-2003 à 11:02:07    

backdafuckup a écrit :

oh ca va faut arreter maintenant....
me ridiculisez pas tant que ca...
ya des gens qui les lisent ces posts


 
 :sol:

Reply

Marsh Posté le 18-04-2003 à 11:04:14    

Reply

Marsh Posté le 18-04-2003 à 11:05:48    

polo021 a écrit :

:heink:  
que veux tu dire par la?


 
:D Je ne suis pas trop sur ... Là, on arrive dans un domaine hors de mes compétences ! :lol:
 
Mais il me semble que ctrl-c n'agit pas du tout comme un kill -9 de Linux ... Il me semble que lorsqu'on fait un ctrl-c, le système envoie un 'message' au prog pour lui dire de se fermer (je ne connais pas la forme du dit 'message';)


---------------
last.fm
Reply

Marsh Posté le 18-04-2003 à 11:07:30    

theShOcKwAvE a écrit :


 
:D Je ne suis pas trop sur ... Là, on arrive dans un domaine hors de mes compétences ! :lol:
 
Mais il me semble que ctrl-c n'agit pas du tout comme un kill -9 de Linux ... Il me semble que lorsqu'on fait un ctrl-c, le système envoie un 'message' au prog pour lui dire de se fermer (je ne connais pas la forme du dit 'message';)


 
mais kill -9 aussi est un message ! non ?  :heink:  
Et ya pas énormément de messages de kill (pas plus d'une dizaine je crois)...

Reply

Marsh Posté le 18-04-2003 à 11:09:16    

theShOcKwAvE a écrit :


 
:D Je ne suis pas trop sur ... Là, on arrive dans un domaine hors de mes compétences ! :lol:
 
Mais il me semble que ctrl-c n'agit pas du tout comme un kill -9 de Linux ... Il me semble que lorsqu'on fait un ctrl-c, le système envoie un 'message' au prog pour lui dire de se fermer (je ne connais pas la forme du dit 'message';)


ok. Pour ma part ,quand je parlais de la fermeture de la fenetre dos j'aurais plutot dut dire fermeture du pgm mais bon le principe est le meme, essayer de capter la fermeture du pgm dans le pgm  :pt1cable:
 
Enfin voila quoi, resultat on sait toujours pas si bezot3 va faire son truc !arret ou alors se casser la tete pour rien [:violito]  

Reply

Marsh Posté le 18-04-2003 à 11:10:49    

polo021 a écrit :


Enfin voila quoi, resultat on sait toujours pas si bezot3 va faire son truc !arret ou alors se casser la tete pour rien [:violito]  


 
:D
 
 
+1


---------------
last.fm
Reply

Marsh Posté le 18-04-2003 à 11:36:43    

Dans un premier temp, je fais la methode du !arret, et ensuite je me penche sur la gestion des signaux pour tenter de les capter et de gerer proprement.

Reply

Marsh Posté le 18-04-2003 à 11:38:40    

bezot3 a écrit :

Dans un premier temp, je fais la methode du !arret, et ensuite je me penche sur la gestion des signaux pour tenter de les capter et de gerer proprement.
 


 :jap:  
je vois pas en quoi le !arret n'est pas propre mais bon,  
bon amusement quand meme

Reply

Marsh Posté le 18-04-2003 à 11:40:49    

C'est loin pour moi tout ca, mais tu dois pouvoir utiliser la fonction "signal", avec par exemple SIGKILL...par contre je suis plus capable d'être plus précis que ca...:lol:
Mais les solutions données plus haut sont qd même vachement + simples...:D

Reply

Marsh Posté le 18-04-2003 à 11:46:48    

De la doc ici:
http://www-igm.univ-mlv.fr/~dr/NCS [...] 0000000000
[edit]
à priori tu auras plus besoin de la fonction kill...Enfin ca dépend du comportement que tu veux avoir (arret lors de la pression d'une touche, arret lorsque mavariable == valeurquituelappli, ...)!


Message édité par skeye le 18-04-2003 à 11:53:20
Reply

Marsh Posté le 18-04-2003 à 12:02:52    

skeye a écrit :

De la doc ici:
http://www-igm.univ-mlv.fr/~dr/NCS [...] 0000000000
[edit]
à priori tu auras plus besoin de la fonction kill...Enfin ca dépend du comportement que tu veux avoir (arret lors de la pression d'une touche, arret lorsque mavariable == valeurquituelappli, ...)!


 
:jap:
 
Je ne suis pas tout à fait sur, mais il me semble qu'il y avait un système plus ou moins équivalent sous DOS ...
Par contre, pour les services NT ...... :D


---------------
last.fm
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed