KOnsole schliesen



  • Also zum schließen des Konsolenfensters kannst du den Befehl "exit" sowohl unter Windows als auch unter Linux verwenden. Unter Linux kannst du auch durch "logout" unter gewissen Derivaten geziehlten Erfolg haben.

    Aber ich glaube damit schießen wir am Ziel vorbei. Wieso willst du denn das Fenster überhaupt schließen? Vielleicht gibt es andere Lösungswege für das, was du da vorhast... 😉



  • -ProGresS- schrieb:

    Hallo,
    Ich habe versucht mit

    System("closse")
    

    Weil es für Windows System("PAUSE") gibts

    Btw, system("pause") schließt die Konsole nicht. Ganz im Gegenteil, es wird damit üblicherweise verhindert, dass die Konsole sich schließt (pause wartet auf Tastendruck).



  • Die Frage ist doch: Wie ÖFFNEST Du denn die Konsole?


  • Mod

    Wenn du meinst, die Konsole zu beenden, in der dein Programm gestartet wurde, das ist nur über schlimme Hacks möglich und, je nach Rechten, womöglich nicht einmal dann. Das system macht intern seine eigene shell auf. Und die wird durch ein system("exit"); dann eben sofort wieder beendet.



  • Vielleicht willst du dein Programm auch als GUI-Programm kompilieren? (z.B. bei GCC mit der Option -mwindows) Dann wird erst gar kein Konsolenfenster geöffnet. Wenn du dann eines öffnen willst, kannst du das zumindest über System-Libraries machen. (oder gar über aufgerufene Unterprogramme)



  • Hey ,

    Ich bin mir nicht sicher ob das os abhängig ist aber versuche es mal mit

    exit(0);/*kein fehler */ exit(1); /*fehler */
    

    Acuh wenn das keine schöne art ist

    edit: hat

    shadow

    schon gepostet sorry



  • 7xCore schrieb:

    Hey ,

    Ich bin mir nicht sicher ob das os abhängig ist aber versuche es mal mit

    exit(0);/*kein fehler */ exit(1); /*fehler */
    

    Acuh wenn das keine schöne art ist

    edit: hat

    shadow

    schon gepostet sorry

    Nein, shadow meinte so etwas wie system("exit"), glaube ich. Bei exit(return_code) kannst du nach dem Schließen keinen Code mehr ausführen (außer vielleicht im abort-Handler oder wie der heißt).



  • Ah ok falsch verstanden ...

    Je mehr Käse, desto mehr Löcher. Je mehr Löcher, desto weniger Käse. Also: Je mehr Käse, desto weniger Käse!

    😃 😋 nice 😃



  • wxSkip schrieb:

    Nein, shadow meinte so etwas wie system("exit"), glaube ich. Bei exit(return_code) kannst du nach dem Schließen keinen Code mehr ausführen (außer vielleicht im abort-Handler oder wie der heißt).

    system("exit") funktioniert?
    Ich kenne unter Windows
    http://msdn.microsoft.com/en-us/library/ms683150.aspx
    Wie man es bei Linux macht weiss ich nicht.

    Würde mich halt wundern wenn system("exit") funktioniert.
    Ist ja ein neuer Prozess der erstellt wird, und der dann "exit" ausführt. Und wieso sollte der neue Prozess "mein" Console-Handle freigeben können? Das wäre schon recht hart...



  • hustbaer schrieb:

    wxSkip schrieb:

    Nein, shadow meinte so etwas wie system("exit"), glaube ich. Bei exit(return_code) kannst du nach dem Schließen keinen Code mehr ausführen (außer vielleicht im abort-Handler oder wie der heißt).

    system("exit") funktioniert?

    Probier's doch aus 😉
    Ich vermute eher nicht.



  • Wenn man die Konsole entsprechend startet (konsole -e meinProgramm oder xterm -e meinProgramm), dann wird sie auch nach Programmende geschlossen. Man kann das Programm auch mit exec meinProgramm in der Konsole starten, dann wird sie am Programmende ebenfalls geschlossen. Oder man sucht mit getppid die Prozessid des aufrufenden Prozesses und beendet ihn mit kill.

    Das hat aber alles irgendwie nichts mit C++ zu tun 😉



  • system("exit") läuft auf /bin/sh -c "exit" hinaus, macht also eine Shell auf und schließt sie gleich wieder. Was gehen könnte (ich hab das jetzt nicht geprüft) ist

    kill(getppid(), SIGTERM);
    

    Das schickt dem Elternprozess (das wird idR die Shell sein) SIGTERM, woraufhin der sich beenden sollte.


  • Mod

    seldon schrieb:

    Das schickt dem Elternprozess (das wird idR die Shell sein) SIGTERM, woraufhin der sich beenden sollte.

    Und unseren Prozess gleich mitnimmt, weil er uns ein SIGPIPE schickt, dass wir nicht abgefangen haben.

    Ja, das geht gerade sehr in Linux-Systemprogrammierung, aber da ich mir recht sicher bin, dass der Threadersteller gar nicht die Frage stellen wollte, die er gestellt hat, lasse ich den Thread mal hier, falls er sich noch mal meldet was er eigentlich möchte.



  • Bis jetzt ging nix was ihr geschriben habt , ja bei Windows ist es einfacher in demm man ein Befehl bruacht damit Console sich nicht schlisen.



  • Ach, du willst die Konsole offenhalten? In der ursprünglichen Frage war genau vom Gegenteil die Rede.

    Das geht plattformunabhängig beispielsweise so:

    #include <limits>
    #include <iostream>
    
    ...
    
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cin.get();
    

    ...dann muss Enter gedrückt werden, um fortzufahren.



  • seldon schrieb:

    Ach, du willst die Konsole offenhalten? In der ursprünglichen Frage war genau vom Gegenteil die Rede.

    Das geht plattformunabhängig beispielsweise so:

    #include <limits>
    #include <iostream>
    
    ...
    
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cin.get();
    

    ...dann muss Enter gedrückt werden, um fortzufahren.

    Man, diese Hacker-Variante eines system("pause") habe ich ja schon seit Ewigkeiten nicht mehr gesehen. Respekt 👍



  • -ProGresS- schrieb:

    Bis jetzt ging nix was ihr geschriben habt , ja bei Windows ist es einfacher in demm man ein Befehl bruacht damit Console sich nicht schlisen.

    Beim nächsten Mal formulier einfach mal richtig, was du willst. Dann kriegst du auch direkt vernünftige Antworten und musst dich nicht unnötigerweise beschweren. 🙄


Anmelden zum Antworten