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

Shell et commandes GNU Discussion :

Lancer des processus en arrière plan


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 171
    Par défaut Lancer des processus en arrière plan
    Bonsoir,
    Je veux modifier le shell simple si desous pour permettre de lancer
    des processus en arrière plan, comme dans les shells ordinaires,
    en terminant la commande avec un "&". Exemples :
    ? sleep 1000 &
    ? sleep 1000&
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    # include <stdio.h>
    # include <unistd.h>
    # include <string.h>
    # include <stdlib.h>
    # include <sys/types.h>
    # include <sys/wait.h>
     
    enum {
      MaxLigne = 1024,		// longueur max d'une ligne de commandes
      MaxMot = MaxLigne / 2,	// nbre max de mot dans la ligne
    };
     
    # define PROMPT "? "
     
    /* decouper  --  decouper une chaine en mots */
    static void decouper(char ligne[], char separ[], char * mot[], int maxmot) {
      int i, j;
     
      if (mot[0] == 0)
        return;
     
      for(mot[0] = strtok(ligne, separ), i = 1; mot[i - 1] != 0 && i < maxmot - 1; i++)
        mot[i] = strtok(NULL, separ);
      mot[i] = 0;
     
    # ifdef DEBUG
      printf("liste des mots :\n");
      for(j = 0; j < i; j++)
        printf("\t'%s'\n", mot[j]);
      printf("fin de la liste des mots\n");
    # endif
    }
     
    int main(int argc, char * argv[]) { 
      char ligne[MaxLigne];
      char *mot[MaxMot];
      int tmp;
     
      /* Lire et traiter chaque ligne de commande */
      for(printf(PROMPT); fgets(ligne, sizeof ligne, stdin) != 0; printf(PROMPT)){
        decouper(ligne, " \t\n", mot, MaxMot);
        if (mot[0] == 0)		// ligne vide
          continue;
     
        // Commande spéciale qui doit être exécutée par le parent
        if (strcmp(mot[0], "cd") == 0){
          if (mot[1] == 0)
    	mot[1] = getenv("HOME");
          else if (mot[2] != 0){
    	fprintf(stderr, "usage: cd [dir]\n");
    	continue;
          }
          if (chdir(mot[1]) < 0)
    	perror("cd");
          continue;
        }
     
        tmp = fork();		// lancer le processus enfait
        if (tmp < 0){
          perror("fork");
          continue;
        }
     
        if (tmp != 0){	       // parent : attendre la fin de l'enfant
          while(wait(0) != tmp)
    	;
          continue;
        }
     
        execvp(mot[0], mot);	// enfant : exécuter la commande
    				// si on arrive ici, c'est qu'il y a une erreur
     
        perror(mot[0]);
        exit(1);
      }
     
      printf("Bye\n");
      return 0;
    }
    error(mot[0]);
        exit(1);
      }
     
      printf("Bye\n");
      return 0;
    }

    Merci.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    d'abord c'est du C et pas du shell.

    Ensuite où veux-tu mettre ça ? Je ne vois rien dans ce code qui suggèrerait un endroit.

    Enfin si c'est en C c'est pas compliqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    i = system("commande + paramètres &");

  3. #3
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 171
    Par défaut

    Ensuite où veux-tu mettre ça ? Je ne vois rien dans ce code qui suggèrerait un endroit.
    En fait quand jéxecute le programme il me retourne un "?" comme prompt et là je veut de façon que quand je tape
    ? emacs & alors il me lance un emacs en me rendant la main (?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    i = system("commande + paramètres &");
    je ne sais pas quoi mettre comme argument pour system et dans quel endroi du code l'inserer.
    Merci.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    quel est le programme que tu veux lancer en arrière-plan ?

  5. #5
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 171
    Par défaut
    Par exemple emacs & .
    Merci.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/08/2014, 22h31
  2. Lancer un processus en arrière-plan
    Par Morgan7469 dans le forum C#
    Réponses: 10
    Dernier message: 17/03/2011, 14h48
  3. Changer la priorité des processus d'arrière plan Oracle
    Par dcollart dans le forum Administration
    Réponses: 1
    Dernier message: 16/07/2010, 15h22
  4. Lancer sous la console dos un processus en arrière plan.
    Par ziad.shady dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 25/10/2009, 14h44

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