web-dev-qa-db-fra.com

Comment fermer le terminal avec mon programme?

Mon code:

#include <cstdlib>

#include <time.h>

#include <unistd.h>

using namespace std;

int main()
{
system("clamscan -r --log=clamavlog.txt --infected --bell /home/secon/Downloads");
sleep(1);
system("exit");
}

Le problème est que mon programme effectue le scan, mais que le terminal reste ouvert, je compile et exécute mon programme avec termianl en utilisant: gcc auto.cpp -o auto.exe pour compiler, et ./auto.exe pour fonctionner. J'essaie d'utiliser system("exit") mais cela ne fonctionne pas. P.S. Désolé pour mon mauvais anglais.

1
secon25

Bien que vous ne puissiez pas forcer votre application compilée à fermer la fenêtre du terminal dans lequel elle s'exécute, il est facile de le faire en modifiant la façon dont vous exécutez votre programme.

Par exemple, si votre application exécutable peut être lancée à l'aide de ./myprogramm, vous pouvez simplement taper la commande ci-dessous dans votre terminal pour exécuter d'abord myprogramm et dès qu'elle est terminée, exécutez la commande exit. pour fermer le shell et avec lui toute la fenêtre du terminal:

./myprogramm ; exit

Ou peut-être serait-il encore préférable de ne fermer la fenêtre du terminal que si votre application s'est terminée avec succès, sans aucune erreur (indiquée par un code d'état de sortie autre que 0). Vous pouvez utiliser && au lieu de ; pour exécuter la deuxième commande uniquement si la première commande a abouti:

./myprogramm && exit

Une troisième solution consisterait à remplacer le shell en cours d'exécution par votre application dans la fenêtre de votre terminal, au lieu de l'exécuter à l'intérieur du shell. De cette façon, la fenêtre du terminal se fermera dès la fermeture de votre application et vous ne serez plus obligé de quitter le shell à ce stade:

exec ./myprogramm

Une grande différence entre les deux premières approches (; exit et && exit) et la dernière utilisant exec est que, dans le premier cas, vous pouvez supprimer la commande que vous avez exécutée en appuyant sur Ctrl+C et vous serez de retour dans la coquille, la fenêtre restera ouverte. Si vous avez utilisé exec, cela va également tuer votre application, mais comme il n'y a plus de Shell dans lequel elle est en cours d'exécution, la fenêtre du terminal se ferme immédiatement.

1
Byte Commander