120 likes | 227 Views
GPA435 – Lab #2 partie 2. Explications compl é mentaires. Problématique. Création d ’ un programme Bourne shell ( tparente ) capable de retracer la parenté des processus. Processus en mémoire au moment du l ’ exécution du programme tparente .
E N D
GPA435 – Lab #2 partie 2 Explications complémentaires GPA435 – révision 2013, Tony Wong, ing., Ph.D.
Problématique • Création d’un programme Bourne shell (tparente) capable de retracer la parenté des processus. • Processus en mémoire au moment du l’exécution du programme tparente. • Affichage des liens de parenté selon les options données par l’utilisateur du programme.
Liens de parenté • Ces liens de parenté existent car: • Un processus peut créer et exécuter un autre processus; • En langage C –fork(), exec(), etc. • Un interpréteur de commandes peut exécuter un autre interpréteur de commandes; • Dans le bourne shell – regroupement des commandes entre parenthèses –( ).
Liens de parenté • Tous les processus en mémoire ont un ancêtre commun: • Processus sched portant le numéro PID = 0. • Processus sched crée et exécute les processus suivants: • init (PID = 1), pageout (PID = 2), fsflush (PID = 3).
Liens de parenté • Vos propres programmes en exécution sont créés de la même façon. • L’environnement CDE est un ensemble de processus créés à partir du processus init (PID = 1); • Le terminal avec lequel vous travaillez est la création d’un des processus de l’environnement CDE.
Numéros PID • Identification des liens de parenté: • Par le numéro PID (Process IDentification) des processus. • Les parents d’un processus possèdent un PID plus petit que le PID d’un enfant: • PIDpère < PIDenfant • Le processus père est indiqué par le numéro PPID (Parent PID). • Tous les processus ont comme ancêtre le processus PID = 0.
USER PID PPID S PRI TT STIME TIME COMMAND root 0 0 T 96 ? Jan_03 0:17 sched root 1 0 S 59 ? Jan_03 0:02 /etc/init - root 2 0 S 98 ? Jan_03 0:00 pageout root 3 0 S 60 ? Jan_03 9:05 fsflush root 541 1 S 59 ? Jan_03 0:00 /usr/lib/saf/sac -t 300 root 228 1 S 59 ? Jan_03 0:00 /usr/sbin/inetd -s daemon 247 1 S 59 ? Jan_03 0:00 /usr/lib/nfs/statd root 62 1 S 59 ? Jan_03 0:00 /usr/lib/sysevent/syseve root 31 1 S 59 ? Jan_03 0:00 /sbin/dhcpagent root 74 1 S 59 ? Jan_03 0:00 /usr/lib/picl/picld root 98 1 S 59 ? Jan_03 0:00 /etc/opt/SUNWconn/atm/bi root 19209 520 S 59 ?? Jan_16 0:00 /usr/openwin/bin/fbconso nobody 716 228 S 59 ? Jan_04 0:38 fs catia11 10181 1 S 49 ? Jan_14 0:00 /bin/ksh /usr/catia/cfg/ root 2191 228 S 59 ? Jan_09 0:00 rpc.ttdbserverd root 24925 228 S 59 ? 08:29:18 0:00 in.telnetd catia11 10186 10181 S 49 ? Jan_14 0:01 CATLICSL 1515 root 19207 520 S 59 ? Jan_16 0:01 /usr/openwin/bin/Xsun :0 root 24945 228 S 59 ? 08:30:07 0:00 in.telnetd wong 24927 24925 S 59 pts/2 08:29:18 0:00 -tcsh root 11841 2314 S 59 ? Jan_15 0:00 remotedprovider solaris_ wong 24947 24945 S 49 pts/3 08:30:08 0:00 -tcsh daemon 12064 228 S 59 ? Jan_15 0:00 rpc.cmsd
Programme tparente • Le programme permet la spécification de trois options facultatives qui modifient son comportement • Lisez attentivement la description contenue dans le cahier de laboratoire. • Le programme permet la saisie d’un paramètre facultative qui spécifie le fonctionnement du programme.
Aide à la programmation • Pour obtenir les options et le paramètre donnés sur la ligne de commande: • Utiliser la commande for–do–done. • Pour déterminer les options et le paramètres donnés sur la ligne de commande: • Utiliser les instructions case–esac.
Aide à la programmation • Pour déterminer les liens de parenté des processus en exécution: • Utiliser la commande ps avec les options et les paramètres appropriés; • Enregistrer l’information obtenue dans un fichier à l’aide d’une redirection; • Lire le fichier de données par la commande read; • Appliquer un algorithme approprié pour retracer les liens de parenté à partir du fichier de données.
Aide à la programmation • Pour afficher les résultats à la sortie standard: • Utiliser la commande echo ou • Utiliser la commande printf • Pour enregistrer les résultats dans un fichier: • Rediriger la sortie standard vers le fichier spécifié par le paramètre obtenu de la ligne de commandes.
Aide à la programmation • Séparer les différentes parties de votre programme en fonctions. • Répartir le travail entre les membres de l’équipe. • Tester les parties séparément. • Assembler les parties pour former le programme final.