Examen de Système II
Licence - Septembre 2002


Exercice

  1. Les shells possèdent des commandes internes et externes. De quoi s'agit-il ?
  2. Donner l'exemple d'une commande qui ne peut être qu'interne. Justifiez.

Exercice

  1. Écrire un programme dont l'exécution conduira à la création d'un processus zombi.
  2. Comment fait-on disparaître un processus zombi ?

Exercice

  1. Écrire un programme affichant le numéro du signal qui lui a été envoyé;
  2. Que se passe-t'il lorsqu'on lui envoie le signal SIGKILL ?

Exercice

Soit le programme suivant :
#include <unistd.h>
#include <stdio.h>

int main()
{
  printf("Salut, ");
  if ( fork() == 0 ) {
    write(STDOUT_FILENO,"c'est moi\n",10);
  } else {
    write(STDOUT_FILENO,"c'est lui\n",10);
  }
}
Quel sont les affichages produits lorsqu'on exécute le programme ? Justifiez.

Problème

Écrire un shell ayant les fonctionnalités suivantes :
  1. exécution de commandes en avant-plan;
  2. exécution de commandes en arrière-plan;
  3. support de commandes internes;
  4. les exécutions pouvant être limitées dans le temps à l'aide d'une borne définie par l'utilisateur.
On pourra considérer qu'une fonction permettant de décoder une ligne de commande est disponible :
int decode(const char *ligne,int &nargs,char ***args,int *delai,int *interne);
Cette fonction prenant en entrée la ligne et renvoie en retour : Écrire le code de la commande interne de l'exercice 1. Utiliser les déclarations/définitions suivantes :
int commande_interne_1(int nargs,char **args) {
    ....
}
#define MAXCOMINT ...
int (*commandes_internes[MAXCOMINT])(int,char **) = { commande_interne_1, ... };


Jean-Baptiste Yunes 2002-09-16