IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

fermer le terminal après avoir lancer la cmd SYSTEM


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut fermer le terminal après avoir lancer la cmd SYSTEM
    Bonjour,

    Je débute en C++.
    J’exécute une commande dans system. Et suite à la commande, terminal s'ouvre et exécute ma commande.
    Comment puis-je fermer le terminal par programme pour finir ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <iostream>
     
    int main(int argc, const char * argv[]) {
        system("open -n /Applications/Notes.app/");
        return 0;
    }
    Il y a t-il une alternative a system pour exécuter un autre programme ?

    Merci de votre aide,

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 507
    Par défaut
    ajouter un "exit" en fin de script mais utiliser "system", c'est tout pourrie.

    Il y a t-il une alternative a system pour exécuter un autre programme ?
    https://msdn.microsoft.com/en-us/lib...or=-2147217396

    https://msdn.microsoft.com/en-us/lib...or=-2147217396

    etc...

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 281
    Par défaut
    Vu le texte, je pense qu'il est sur Apple le gars.

    La commande open ne semble pas faite pour lancer une appli mais pour ouvrir un doc avec le logiciel sensé l'ouvrir.

    https://developer.apple.com/library/...n1/open.1.html

    Essayes ceci ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system("/Applications/Notes.app/Contents/MacOS/Notes");
    Sur mac, les Applications .app sont des espèces de dossiers virtuels dont on peut voir le contenu avec bouton droite afficher le contenu du paquet, si ça marche pas vérifie que le chemin que je t'es donné est bon (j'ai pas de mac sous le coude).

    J'ai pas de mac pour tester là. Et sinon, en théorie la fonction system appelle le terminal pour executer la commande lui ayant été passée en paramètre, celui-ci se fermant lors de la fermeture de Notes dans l'exemple.

    Essayes avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system("/Applications/Notes.app/Contents/MacOS/Notes&");
    Pas sûr que ça marche, le & est sensé lancer la commande en tache de fond.

    Sinon, il doit avoir une fonction dans l'API mac OS pour faire cela.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Membre très actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    551
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 551
    Par défaut
    Bonsoir
    Citation Envoyé par bella1 Voir le message
    Bonjour,
    Je débute en C++.
    J’exécute une commande dans system. Et suite à la commande, terminal s'ouvre et exécute ma commande.
    Comment puis-je fermer le terminal par programme pour finir ?
    Oui il existe des alternatives à la commande système qui permet d'exécuter une autre application indépendamment de l'application appelante en clair cela se traduit par, j'ouvre mon programme, celui-ci crée un processus fils qui va par la suite exécuter un programme. (pour faire simple). Et c'est alternatif sont dite des primitives de recouvrement qui font partie de la famille EXEC.

    Citation Envoyé par chrtophe Voir le message
    Vu le texte, je pense qu'il est sur Apple le gars.
    La commande open ne semble pas faite pour lancer une appli mais pour ouvrir un doc avec le logiciel sensé l'ouvrir.
    https://developer.apple.com/library/...n1/open.1.html
    Essayes ceci ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system("/Applications/Notes.app/Contents/MacOS/Notes");
    Sur mac, les Applications .app sont des espèces de dossiers virtuels dont on peut voir le contenu avec bouton droite afficher le contenu du paquet, si ça marche pas vérifie que le chemin que je t'es donné est bon (j'ai pas de mac sous le coude).
    J'ai pas de mac pour tester là. Et sinon, en théorie la fonction system appelle le terminal pour executer la commande lui ayant été passée en paramètre, celui-ci se fermant lors de la fermeture de Notes dans l'exemple.
    Essayes avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    system("/Applications/Notes.app/Contents/MacOS/Notes&");
    Pas sûr que ça marche, le & est sensé lancer la commande en tache de fond.
    Sinon, il doit avoir une fonction dans l'API mac OS pour faire cela.
    Votre instruction fonctionne sur un mac. Cependant "system" ne fonctionnera pas correctement avec les programmes ayant des privilèges.
    Citation Envoyé par bella1 Voir le message
    Bonjour,
    Il y a t-il une alternative a system pour exécuter un autre programme ?
    Oui voici une alternatives qui utilise un processus fils afin d'exécuter un programme.
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    /* Crée un processus fils qui exécute un nouveau programme */
    int main(int argc, const char *argv[] ) {
        return ( (0) == fork() ) ? 
         execv( "/Applications/Notes.app/Contents/MacOS/Notes", NULL ) : getpid();
    }
    En complément à mon exemple voici un lien pour plus de détail
    à bientôt

  5. #5
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    Bonjour,
    Merci pour vos réponses.
    J'utilise un mac.

    Toutes les solutions fonctionnent mais le terminal reste toujours ouvert.
    Il n'est pas possible qu'il se ferme après avoir ouvert l'application Notes.app ?

    Encore merci,

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 281
    Par défaut
    Il faut à mon avis, comme je l'ai dit utiliser les fonctions des API Apple (Cocoa).

    Tu peux aussi utiliser un fork (création d'un nouveau process) suivi d'une fonction exec dont t'as parlé sambia39 (dans le processus fils).

    https://developer.apple.com/library/...n2/fork.2.html
    https://developer.apple.com/library/...n3/exec.3.html

    Il s'agit là des fonctions BSD, pas des fonctions native Mac OS X. (mais tu peux les utiliser). L'utilisation de fork/exec ne t'ouvrira pas de terminal.

    La fonction system crée un nouveau processus avec fork, lance un terminal avec execve avec en arguments ce que tu as passé à la fonction system.

    En googlisant, je suis tombé sur ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[NSWorkSpace sharedWorkspace] launchApplication:@"/Applications/Safari.app"];
    mais c'est pas du C++, c'est de l'objective-C. Je ne sais pas si tu peux appeler la fonction launchApplication en C++. Pour plus d'info tu peux poser la question dans le forum dédié mac.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Membre très actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    551
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 551
    Par défaut
    Citation Envoyé par bella1 Voir le message
    Bonjour,
    Merci pour vos réponses.
    J'utilise un mac.
    Toutes les solutions fonctionnent mais le terminal reste toujours ouvert.
    Il n'est pas possible qu'il se ferme après avoir ouvert l'application Notes.app ?
    Encore merci,
    Bonjour
    Je suis sur un Mac également et les deux exemples qui vous ont été fournie fonctionnent correctement.
    Là où vous faites référence c'est quand vous cliquer deux fois sur un exécutable et que celui-ci exécute par la suite votre instruction qui va créer un processus fils afin d'exécuter un autre programme dont le non ou le chemin complet lui a été fournie. Mais après exécution vous avez un terminale qui est toujours active dans lequel vous avez juste le retour de votre programme lancer en clair , le chemin complet de l'exécutable et une indication avec exit. Si c'est de cette fenêtre dont vous parler, c'est normal. Car il me semble que c'est un peu la trace d'exécution de votre programme. Je ne suis pas sûr mais, il doit faire appel à un primitif système et lancer un processus qui attend la fin d'exécution ( un expert système Mac pourrait nous éclairer) de votre programme ou autres.
    L'alternative dans cette situation est de tuer le processus initial c'est-à-dire, le mécanisme qui est à l'origine de l'exécution de votre programme et il faut le faire juste après la fin d'exécution de votre programme en clair, vous allez mettre en place une sorte de court-circuit barbare qui a pour but de ne pas laisser trainer la console de trace.
    D'un autre côté sans vous offenser, vous êtes débutant en programmation et mettre un système de court-circuit demande certaines notions en programmation système et la connaissance du système en question et cela, afin d'éviter la corruption ou la déstabilisation de votre système.
    Le conseil qui me semble utile pour vous est de laisser ce détail de côté pour l'instant le temps que vous aillé les bases suffisantes et d'un autre côté, system suffit dans votre cas pour un débutant sauf si le but est d'exécuter votre programme de façon furtive à l'insu de l'utilisateur, là c'est autre chose et pas très conforme.
    à bientôt.

Discussions similaires

  1. [Batch] Fermer une tâche si elle n'a pas terminé après "x" secondes.
    Par MacZourite dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 01/06/2015, 09h04
  2. Réponses: 1
    Dernier message: 12/04/2010, 15h46
  3. Afficher un message, après avoir cliquer sur FERMER
    Par horse dans le forum Débuter
    Réponses: 2
    Dernier message: 05/04/2010, 03h08
  4. Le script continu à trouner même après avoir fermer le navigateur
    Par sami_c dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 01/07/2008, 14h40
  5. [NAV 2004] Bug après avoir renommé la corbeille
    Par Halleck dans le forum Windows
    Réponses: 2
    Dernier message: 29/02/2004, 21h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo