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

  FORUM HardWare.fr
  Programmation
  C++

  Stopper un programme lancé en ligne de commande ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Stopper un programme lancé en ligne de commande ?

n°365900
bezot3
Posté le 18-04-2003 à 09:30:27  profilanswer
 

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.

mood
Publicité
Posté le 18-04-2003 à 09:30:27  profilanswer
 

n°365906
backdafuck​up
Back to da old skool
Posté le 18-04-2003 à 09:33:13  profilanswer
 

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

n°365910
polo021
Posté le 18-04-2003 à 09:34:35  profilanswer
 

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
n°365913
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 09:35:11  profilanswer
 

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
n°365925
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 09:37:45  profilanswer
 

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
n°365978
bezot3
Posté le 18-04-2003 à 10:06:29  profilanswer
 

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 ?

n°365987
polo021
Posté le 18-04-2003 à 10:10:22  profilanswer
 

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
n°366000
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 10:18:43  profilanswer
 

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
n°366004
polo021
Posté le 18-04-2003 à 10:20:23  profilanswer
 


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

n°366005
backdafuck​up
Back to da old skool
Posté le 18-04-2003 à 10:20:49  profilanswer
 

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]

mood
Publicité
Posté le 18-04-2003 à 10:20:49  profilanswer
 

n°366010
polo021
Posté le 18-04-2003 à 10:23:06  profilanswer
 
n°366017
backdafuck​up
Back to da old skool
Posté le 18-04-2003 à 10:26:35  profilanswer
 


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

n°366022
polo021
Posté le 18-04-2003 à 10:28:40  profilanswer
 

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
n°366029
backdafuck​up
Back to da old skool
Posté le 18-04-2003 à 10:32:07  profilanswer
 

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]

n°366038
bezot3
Posté le 18-04-2003 à 10:39:45  profilanswer
 

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

n°366044
polo021
Posté le 18-04-2003 à 10:41:54  profilanswer
 

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"

n°366045
backdafuck​up
Back to da old skool
Posté le 18-04-2003 à 10:42:07  profilanswer
 

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. }

n°366046
backdafuck​up
Back to da old skool
Posté le 18-04-2003 à 10:42:24  profilanswer
 

polo021 a écrit :


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


 :lol:  
[:plusun]

n°366052
polo021
Posté le 18-04-2003 à 10:44:25  profilanswer
 

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]

n°366065
backdafuck​up
Back to da old skool
Posté le 18-04-2003 à 10:48:59  profilanswer
 


 
 :pfff:  
 
pourquoi ?
 
 
et puis d'abord  

Citation :

break();


 
[:ban]

n°366072
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 10:52:52  profilanswer
 


+1


---------------
last.fm
n°366076
polo021
Posté le 18-04-2003 à 10:53:54  profilanswer
 

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
n°366078
backdafuck​up
Back to da old skool
Posté le 18-04-2003 à 10:54:08  profilanswer
 

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
n°366079
bezot3
Posté le 18-04-2003 à 10:54:20  profilanswer
 


 
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 ...

n°366081
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 10:55:22  profilanswer
 

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
n°366084
backdafuck​up
Back to da old skool
Posté le 18-04-2003 à 10:56:53  profilanswer
 

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

n°366088
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 10:59:00  profilanswer
 

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
n°366090
polo021
Posté le 18-04-2003 à 10:59:33  profilanswer
 

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?

n°366094
ToxicAveng​er
Posté le 18-04-2003 à 11:02:07  profilanswer
 

backdafuckup a écrit :

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


 
 :sol:

n°366097
backdafuck​up
Back to da old skool
Posté le 18-04-2003 à 11:04:14  profilanswer
 
n°366103
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 11:05:48  profilanswer
 

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
n°366108
backdafuck​up
Back to da old skool
Posté le 18-04-2003 à 11:07:30  profilanswer
 

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)...

n°366112
polo021
Posté le 18-04-2003 à 11:09:16  profilanswer
 

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]  

n°366118
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 11:10:49  profilanswer
 

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
n°366198
bezot3
Posté le 18-04-2003 à 11:36:43  profilanswer
 

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.

n°366202
polo021
Posté le 18-04-2003 à 11:38:40  profilanswer
 

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

n°366207
skeye
Posté le 18-04-2003 à 11:40:49  profilanswer
 

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

n°366228
skeye
Posté le 18-04-2003 à 11:46:48  profilanswer
 

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
n°366256
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 12:02:52  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Stopper un programme lancé en ligne de commande ?

 

Sujets relatifs
[Idée] C'est faisable ce type de programme ?[CSS] fond de ligne changeant 1 fois sur 2
Exécuter un programme php automatiquement [résolu]perl - protéger un programme contre les plantages ?
Erreurs lors du lancement d'un programme GTKbug dans mon programme vb.net besoin d'aide ( resolu)
commande `ls`[C] stack overflow a la premiere ligne
Erreur lors de l'execution d'un programme en Javacommande winzip
Plus de sujets relatifs à : Stopper un programme lancé en ligne de commande ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR