examiner l’exécution de calcloop et filtre pour imprimer seulement les lignes lorsque
l’état de calcloop change.
Étape 5 : Vous pouvez expérimenter avec l’envoie de signaux au processus calcloop.
Après avoir exécuté mon2 calcloop & (& permet de pouvoir exécuter d’autres
commandes) :
Déterminez le pid du calcloop (par exemple avec la commande ps).
Envoyez-y un signal d’arrêt avec la commande « kill –s SIGSTOP pid »
où pid est le pid du calcloop déterminé au dernier point.
Envoyez-y un signal de départ avec la commande « kill –s SIGCONT
pid ».
Notez que vous devez être rapide pour faire le tout à l’intérieur des 20 secondes que roule
calcloop.
Information utile:
L’exécution d’un programme C commence par sa fonction main() qui comprends deux
paramètres, l’entier argc qui donne le nombre d’arguments de la ligne de commande
(qui a fait exécuter le programme) et un tableau de pointeurs à des chaînes de
caractères donnant accès aux arguments de la ligne de commande. Par convention,
argv[0]¸donne le nom du programme et argv[1] donne le premier argument.
L’appel système fork() créée un nouveau processus. Le parent et l’enfant continue au
même point, i.e., le retour de l’appel fork(). Mais chez le parent, fork() retourne le PID
de l’enfant tandis que chez l’enfant, fork() retourne la valeur 0. Pour plus
d’information au sujet de fork(), utilisez
man fork
.
L’appel système execl(path, arg1, …) remplace l’image dans un processus par un
programme avec des paramètres donnés. Tapez pour connaître la signification exacte
de chacun des paramètres. L’appel execl(“calcloop”,”calcloop”,NULL) remplace le
code dans le processus avec le programme calcloop. L’appel execl(“/bin/ls”, “ls”, “-
l”, NULL) exécute le code du programme ls –l.
Vous devez convertir le nombre entier PID à une chaîne de caractère pour l’envoyer
vers procmon. Ceci peut être fait en C avec une fonction de bibliothèque :
sprintf(pidchn,“%d”,pid), où pid est une variable int qui contient la valeur du pid, et
pidchn est un tableau de caractères (char pidchn[20]) qui recevra la chaîne de
caractères du PID à être envoyé vers procmon.
La fonction sleep() qui fera dormir le processus pour le nombre de secondes spécifié
dans son paramètre.
L’appel système kill(pid,sig) qui envoie un signal sig au processus pid.
o Examinez signal.h pour connaître les différents signaux.
o Google est votre ami, le lien suivant suite à une recherche de « signal.h » peut
être utile (il y en a beaucoup plus au sujet des appels et fonctions standards C)
http://www.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html
Un descripteur de fichier (file descriptor) est un nombre entier, qui sert de poignée
(handle) pour identifier un fichier ouvert. Ce descripteur est utilisé avec d’autres
fonctions ou systèmes d’appel tel que read() et write() pour faire des opérations E/S
avec le fichier correspondant.