Acadc TP4-2020
Acadc TP4-2020
Acadc TP4-2020
Exercice 1
1. Ouvrez un terminal et lancez l'application gedit. La fenêtre de l'application s'ouvre, retournez dans le terminal.
2. Dans le terminal, utilisez les touches « CtrlC » pour forcer la terminaison du processus. La fenêtre disparaît et
vous avez à nouveau la main dans le terminal.
3. Lancez à nouveau gedit à partir du terminal. Puis retournez dans le terminal et utilisez les touches « Ctrl Z ».
Vous avez à nouveau la main, mais estce que la fenêtre répond ?
4. Tapez dans le terminal fg (pour foreground, ou « premier plan »). Avezvous accès au terminal et/ou à la fenêtre
?
5. Refaites un « CtrlZ » et tapez maintenant bg (pour background ou « arrièreplan »). Qu'en estil de vos accès au
terminal/à la fenêtre ?
6. Lancez gedit & deux fois à l'aide d'un même terminal.
7. Tapez la commande ps dans un terminal.
8. La commande jobs permet-elle d'énumérer les programmes en cours d'exécution ou à l'arrêt pour le shell
courant. Lancez à nouveau gedit, puis effectuez un « CtrlZ ». Tapez maintenant jobs.
4. En tapant fg, vous reprenez la main sur le dernier processus gedit placé en attente. Le terminal ne répond plus,
utilisez « CtrlC » pour fermer l'éditeur.
Exercice 2
1. Utilisez le manuel pour vous documenter et ensuite utiliser les commandes : ps, top, kill.
2. A partir de votre console, affichez la liste des processus associés à votre terminal. Recommencez en utilisant
l'option "-l". A quoi correspondent les colonnes PID et PPID ?
3. Lancez gedit en tâche de fond et vérifiez qu'il est bien en arrière-plan.
4. Mettez gedit en avant plan.
5. Quel est le comportement du processus associé à gedit lorsqu'il reçoit les signaux suivants: SIGSTOP,
SIGCONT, SIGKILL.
Un signal est envoyé par la commande :
$ kill -numsignal pid
3. Donner deux commandes pour reprendre l’exécution d’une instruction interrompue par un ^Z.
4. Que se passe–t–il si vous tuez le processus associé à bash (utiliser la commande kill -9 pid)?
Exercice 3
1. A partir d’une console, lancer l’éditeur de texte Vi ou autre et saisir le code du programme suivant.
// fils.c
#include <stdio.h>
#include <unistd.h> // fork
#include <stdlib.h> // exit
void main()
{
int pid= fork();
if (pid==0)
{
// Code du fils
printf("Début fils \n");
printf("Processus fils de pid=%d, ppid=%d\n", getpid(), getppid());
sleep(5);
exit(0);
// Fin du processus fils
1
Département d'Informatique Section C
Faculté Electronique et Informatique Licence Informatique
USTHB Par Mme doukha
}
// Suite code du père
sleep(2);
printf("Processus père de pid=%d, ppid=%d\n", getpid(), getppid());
}
2. Compiler et exécuter le programme généré.
3. Ecrire un programme dont le père va créer séquentiellement 2 fils. Chaque fils devra afficher un message du
type “fils de pid x : bonjour” au départ de son exécution et un message du type “fils de pid x : au revoir” à la
fin de son exécution.
4. Modifier ce programme pour que le père affiche un message avant la création de chaque fils, attend la fin de
l’exécution de chaque fils et le signale par un affichage.
Exercice 4
1. En utilisant la fonction execlp, exécuter la commande « ls » en écrivant le programme suivant:
//simpleexec.c
#include <stdio.h>
#include <unistd.h> // execlp, perror
void main()
{
execlp("ls", "ls", NULL);
perror("Erreur sur execlp");
}
2. Tester l'utilisation de paramètres via le programme suivant :
// complexec.c
#include <stdio.h>
#include <unistd.h> // execlp
#include <stdlib.h> // exit
int menu()
{
printf ("1 – Editer avec vi \n");
printf ("2 – Afficher un fichier \n");
printf ("3 – Détruire un fichier \n");
printf("\n Votre choix ? ");
int choix;
scanf("%d", &choix);
return choix;
}
void main(int argc, char* argv[])
{
if (argc != 2)
{
printf ("Usage: %s <fichier>\n", argv[0]);
exit(1);
}
char* fichier=argv[1];
switch (menu())
{
case 1 : execlp("vi", "vi", fichier, NULL); break;
2
Département d'Informatique Section C
Faculté Electronique et Informatique Licence Informatique
USTHB Par Mme doukha
3. Modifier le 1er programme pour permettre à l'utilisateur de taper un paramètre à passer à la commande
(exemple: « ls –al »).
4. Ecrire un petit programme qui affiche une somme de trois entiers. Exécuter ce programme à l'aide de la
fonction execv(), en s'inspirant du 1er programme qui lance la commande ls.
Exercice 5
Écrire un programme dont le père, après avoir créé trois fils (f1, f2, f3), attend le retour de ces trois fils pour
réaliser le calcul 3 × 10 + 5.
Les données :
- le fils f1 retourne la valeur 5;
- le fils f2 retourne la valeur 10;
- le fils f3 retourne la valeur 3.