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

Linux Discussion :

Différentes phases dans lancement d'une commande linux ou d'un script shell


Sujet :

Linux

  1. #1
    Membre confirmé
    Profil pro
    Pôle Etude et Automatisation
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pôle Etude et Automatisation
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut Différentes phases dans lancement d'une commande linux ou d'un script shell
    Bonjour,

    Lorsque je lance un script shell ou commande linux, les étapes effectuées par l'OS sont:

    - chargement du fichier en question en mémoire (appel système open()?)

    - si programme alors création d'un nouveau processus (exception commande interne) (appel système fork())

    Le déroulement s'effectue t il comme cela?

    Cordialement
    Eric

  2. #2
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    3.7.1 Simple Command Expansion
    ------------------------------

    When a simple command is executed, the shell performs the following
    expansions, assignments, and redirections, from left to right.

    1. The words that the parser has marked as variable assignments (those
    preceding the command name) and redirections are saved for later
    processing.

    2. The words that are not variable assignments or redirections are
    expanded (*note Shell Expansions:: ). If any words remain after
    expansion, the first word is taken to be the name of the command
    and the remaining words are the arguments.

    3. Redirections are performed as described above (*note
    Redirections:: ).

    4. The text after the `=' in each variable assignment undergoes tilde
    expansion, parameter expansion, command substitution, arithmetic
    expansion, and quote removal before being assigned to the variable.

    If no command name results, the variable assignments affect the
    current shell environment. Otherwise, the variables are added to the
    environment of the executed command and do not affect the current shell
    environment. If any of the assignments attempts to assign a value to a
    readonly variable, an error occurs, and the command exits with a
    non-zero status.

    If no command name results, redirections are performed, but do not
    affect the current shell environment. A redirection error causes the
    command to exit with a non-zero status.

    If there is a command name left after expansion, execution proceeds
    as described below. Otherwise, the command exits. If one of the
    expansions contained a command substitution, the exit status of the
    command is the exit status of the last command substitution performed.
    If there were no command substitutions, the command exits with a status
    of zero.

  3. #3
    Membre confirmé
    Profil pro
    Pôle Etude et Automatisation
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pôle Etude et Automatisation
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Merci

    je vais utiliser google traduction

    Eric

  4. #4
    Membre confirmé
    Profil pro
    Pôle Etude et Automatisation
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pôle Etude et Automatisation
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Bonjour,

    A la lecture de "Architecture des machines et des systèmes informatique de chez Dunod" ou de site internet:

    "Habituellement, un programme se trouve sur le disque sous la forme d’un fichier exécutable binaire. Le programme doit être chargé en mémoire et placé dans un processus pour s’exécuter. Ensuite, la plupart du temps, il a la possibilité d’accéder à la mémoire.

    Avant d’être exécuté, un programme doit passer par plusieurs étapes. Au début, le programmeur crée un fichier et écrit son programme dans un langage source, le C par exemple.

    Un compilateur transforme ce programme en un module objet. Il lie les adresses symboliques, par exemple la variable nb_etudiants, à une adresse relogeable, par exemple « 18 octets à partir du début du module ». Le module objet représente la traduction des instructions en C en langage machine.

    Les adresses produites sont généralement relogeables; commençant à l’adresse 00000 et pouvant se traduire en n’importe quel endroit de la mémoire en recevant comme référence initiale le registre de base. Les adresses représentent alors le décalage par rapport à ce registre de base.

    On peut faire appel dans le code à des procédures externes, qui se trouvent dans des bibliothèques externes (libraries), par exemple, l’appel à printf. Les appels à des procédures externes sont laissés comme des points de branchements jusqu’à l’étape d’édition de lien (linkage).

    L’éditeur de liens (linker) fait correspondre ces points à des fonctions contenues dans les bibliothèques et produit, dans le cas d’une liaison statique, une image binaire. Certains systèmes, notamment Linux/Unix et Windows, autorisent des liaisons dynamiques et reportent la phase d’édition de liens jusqu’à l’instant du chargement. Il faut alors construire les objets et les bibliothèques d’une manière légèrement différente.

    Le chargeur effectue les liaisons des appels système avec le noyau, tel que l’appel nanosleep par exemple. Enfin, il charge le programme en mémoire. Sous Linux, le chargeur se nomme ld.so.

    Pour effectuer le chargement, le système alloue un espace de mémoire libre et il y place le processus. Il libérera cet emplacement une fois le programme terminé.

    Les librairies dynamiques sont extrêmement utiles : elles sont partagées généralement par tous les programmes, et une seule copie est nécessaire pour tous ceux-ci. De plus, on peut mettre les bibliothèques à jour sans avoir à recompiler et on encombre moins les disques, car une seule copie de la librairie est utilisée par tous les programmes. Ce sont les fichiers dll de Windows (dynamic load library) et les fichiers so de Linux (shared libraries)."
    J'ai l'impression qu'à chaque fois qu'on lance l'exécution d'un programme toutes les étapes ci dessous sont effectuées

    Intuitivement, je pense que quand je clique sur un programme pour effectuer un travail tout commence avec le chargeur?

    Cordialement
    Eric

  5. #5
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Tu cherches quoi exactement?
    Juste comprendre le fonctionnement ou obtenir des infos précises d'une exécution?

    Tu peux activer des extra logs du kernel (voir dmesg).
    Voir aussi les paramètres de boot au niveau du kernel.

    Concernant Ubuntu (j'ai pris une distri fortement utilisée):
    https://wiki.ubuntu.com/Kernel/KernelBootParameters

    La doc me semble ancienne bien que ce soit Grub2.
    Les paramètres sont à encoder (en édition touche E dans Grub2) juste après le Quiet de la ligne Linux.

    Fais attention que tu peux saboter ton boot, on ne rigole pas avec le kernel

    Reste à trouver la liste des paramèters possibles.

    Tu peux configurer tes devices et même blacklister des modules
    L'idéal étant de prendre un kernel récent, de le configurer et compiler toi même (j'ai déjà fait cela dans le passé) pour ensuite l'utiliser dans Grub, mouhaha

    https://www.howtogeek.com/howto/ubun...ubuntu-kernel/

    Je pense que t'apprendras un max de chose.

  6. #6
    Membre confirmé
    Profil pro
    Pôle Etude et Automatisation
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pôle Etude et Automatisation
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Bonjour,

    Juste comprendre le fonctionnement

    Cordialement

Discussions similaires

  1. lancer une commande linux dans un script perl
    Par hammag dans le forum Langage
    Réponses: 1
    Dernier message: 21/11/2007, 16h18
  2. Réponses: 1
    Dernier message: 21/08/2007, 18h02
  3. Changer l'expéditeur de mail dans une commande linux
    Par TomyMak dans le forum Réseau
    Réponses: 6
    Dernier message: 15/03/2006, 14h05
  4. [débutant]lancement d'une commande Unix ou LInux depuis Java
    Par msiramy dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 30/09/2005, 18h10
  5. Réponses: 2
    Dernier message: 24/06/2003, 20h31

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