Sie sind auf Seite 1von 49

7 - LARRET et le DEMARRAGE

Le dmarrage du systme UNIX

Les processus init

Les scripts /etc/rc

Les sessions

L arrt du systme

JY CELLE anne 2013-2014

Le dmarrage du systme UNIX


Autotest
BIOS (Basic Input Output System)

Chgt PROM

Boot primaire
param noyau et modules
dans /stand/system

Autres boot possibles:


support d installation
rseau
autres supports bootables fait par l administrateur
ignite, bare-metal restore

ISL
Grub-Lilo
Chgt noyau
/stand/vmunix

LOADER
Automatique
ou
Intractif

dmesg

Swapper (PID=0)
init (PID=1)

JY CELLE anne 2013-2014

Lactivation des processus : init (1/3)

/sbin/init
(PID=1)

/etc/inittab

Ensemble dapplications
compatibles avec le
niveau d'init courant

JY CELLE anne 2013-2014

Lactivation des processus : init (2/3)

Plusieurs niveaux de fonctionnement


init initialise le systme dans un niveau
les diffrents niveaux sont dfinis dans /etc/inittab
et sont accessible par la commande init niveau

0
arrt du systme (shutdown = init 0)
1 ou S maintenance ou Single user (root)
2
multi-utilisateurs
3
niveau 2 + rseau
4
niveau spcifique dfinir
5
niveau 3 + mode graphique (Linux)
6
reboot
q
force init relire /etc/inittab
JY CELLE anne 2013-2014

Lactivation des processus : init (3/3)


Le fichier /etc/inittab

Structure du fichier /etc/inittab


$ more /etc/inittab
r2:23:wait:/etc/rc2 </dev/console >/dev/console 2>&1
r3:3:wait /etc/rc3 </dev/console >/dev/console 2>&1
t1:23:respawn:/etc/getty /dev/tty1 9600
o1:3:once:dbstart

Les commandes

init
pour changer de niveau (telinit)
runlevel, who -r pour connatre le niveau
JY CELLE anne 2013-2014

Les scripts de dmarrage : /etc/rc (1/2)

/etc/rc.sysinit (lments cls du systme)

Vrification (fsck, fstat) puis montage des files system


(mount all), Activation du swap

/etc/rc*.d

Lancement des dmons

Activation du rseau

cron
lpsched

Carte rseau (ipconfig)


Routage (route)
Dmon rseau (inetd, nfsd, smbd )

Applications spcifiques

/etc/rc.local (user dfined)


JY CELLE anne 2013-2014

Les scripts de dmarrage : /etc/rc (2/2)


/etc/inittab

init

rc*
/etc/rc2.d/*
K10ora

S01mount
K30tcp

S35cron

Les fichiers dans /etc/rc*.d sont en fait des liens vers les vritables scripts de
dmarrage qui sont tous situs, indpendamment du niveau d'init, dans /etc/init.d.
La gestion de ces liens peut se faire de manire simplifie avec des commandes
comme chkconfig ou service sur Redhat ou Suze ou update-rc.d sur Debian.
JY CELLE anne 2013-2014

Exemple de script - Linux


#
# inittab
This file describes how the INIT process should set up
#
the system in a certain run-level.
#
# Author:
Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
#
Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
id:5:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
# xdm is now a separate service
x:5:respawn:/etc/X11/prefdm nodaemon

ls l /etc/rc.d
init.d/
rc*
rc0.d/
rc4.d/
rc5.d/
rc6.d/
rc.sysinit*
ls l /etc/rc.d/rc5.d
K20rstatd@
S05kudzu@
S26apmd@

rc1.d/
rc2.d/
rc3.d/
rc.firewall rc.local* rc.modules*

K20rusersd@
S10network@
S56rawdevices@

K20rwalld@
S11portmap@
S56xinetd@

K20rwhod@
S12syslog@
S60nfslock@

S01usb@ S05harddrake@
S20random@
S25netfs@
S71sound@
S75keytable@

JY CELLE anne 2013-2014

Les fichiers de paramtres depuis


le boot jusqu' la session
/etc/inittab

init

/etc/gettydefs
getty
tty0
login

sh

getty

/etc/passwd

/etc/profile

tty1
login

ksh

$HOME/.profile

$HOME/.kshrc

$HOME/.profile
JY CELLE anne 2013-2014

Larrt du systme : shutdown

Les utilisateurs sont prvenus de larrt


Les applications sont arrtes proprement
(signal ou commande d arrt)
Les sessions des utilisateurs sont stoppes
Lintgrit des FS est assure (sync, umount)
En fonction de l option le systme :

passe en mode mono-utilisateur (su)


est arrt (h)
est reboot (r)

Commande shutdown, reboot, haltsy


JY CELLE anne 2013-2014

10

8 - LA GESTION DES PROCESSUS

La gestion des applications

Les processus

Les commandes de gestion des processus

Le service cron

Les bibliothques dynamiques

Les IPC

Le logiciel libre
JY CELLE anne 2013-2014

11

La gestion des applications (1/2)

Application = ensemble de processus

Un processus correspond une excution d un programme


dans son propre espace d adressage (espace virtuel)

Processus = un ou plusieurs threads ou processus


lgers
Un processus

un fichier excutable

zro ou n bibliothques

rsultat de la compilation de un ou plusieurs sources

statiques (incluses ds la compilation)


dynamiques (charges et partages lors de l excution)

utilisation de makefile
JY CELLE anne 2013-2014

12

La gestion des applications (2/2)

Les applications crites en C accdent aux ressources


systme grce l API Unix.

Portabilit des applications en C

Bibliothque de fonctions permettant de raliser les appels


systme

une simple re-compilation suffit

Le man de l application dit tout


Lire les log des diffrentes applications (Cf. service syslog)
Activation d une application : rc, sh, init, cron
Surveillance d une application

Par ses processus : ps -ef | grep htpd


Par ses log :
tail -f alert_SID.log
JY CELLE anne 2013-2014

13

Les processus : Gnralits

Pseudo-paralllisme des processus

Hirarchie des processus

Tout process s excutant a t lanc par un autre (pre)


Tout process peut en lancer plusieurs autres (fils)
A l origine un anctre unique INIT

Ordonnanceur ou scheduler

commutation instantane du CPU d un process un autre

Processus du systme d exploitation qui choisit le processus qui


va s excuter lorsque plusieurs sont prts.

2 type de processus

systme (pas de terminal, lancs au dmarrage)


utilisateur (terminal de rattachement, lancs ultrieurement)
JY CELLE anne 2013-2014

14

Les processus : Les tats


cration
wait

signal

ready

signal

ordonnancement

run

terminaison

zombi

RUN : Le

fin dentre/sortie

Entre/sortie
sleep

processus est excut par le


processeur
READY : Le processus pourrait s excuter
mais un autre est en cours.
SLEEP: Le processus est en attente d une
ressource
WAIT : Le processus a t suspendu par
une intervention extrieure
ZOMBI : Le processus a termin son excution
mais est toujours rfrenc par l OS

JY CELLE anne 2013-2014

15

Les processus :
La table des process

Unix gre une table des processus dans laquelle chacun


d eux possde une entre
Cette entre est allou lors de sa cration
Pour chaque entre Unix mmorise des infos concernant
le processus, sa mmoire et les fichiers accds
Les processus sont identifis par

identifiant
identifiant du pre
Identifiant d'un groupe de processus
propritaire
groupe propritaire
terminal de rattachement

PID
PPID
PGID
UID
GID
TTY

JY CELLE anne 2013-2014

16

Les processus : La cration

La primitive fork cre un clone du processus qui l excute.


Le clone (processus fils) excute le code d une autre
commande grce la primitive de recouvrement exec.
Il en rsulte un arbre des processus dont l anctre
commun est le processus init
4 modes d excution d'un processus

foreground (avant-plan) - le shell attend la fin d excution


background (arrire-plan) - le shell redonne immdiatement la main
dtach - plus de terminal de rattachement
dmon - c est un processus systme dtach

JY CELLE anne 2013-2014

17

Les processus : L arrt

Un processus se termine quand

le programme qui sexcute dans le processus est fini


le processus arrive un ordre exit
Le processus reoit un signal extrieur (via primitive kill)

Un processus foreground sera interrompu gnralement


par un CTRL-C alors qu'un processus background y est
insensible.
Les processus background ou dtachs se terminent sur
rception de signal (primitive kill)
Un dmon se termine par utilisation de scripts
La primitive de synchronisation wait permet un
processus dattendre la terminaison de lun de ses fils.
JY CELLE anne 2013-2014

18

Les processus :
Utilisation primitives fork et wait
/* sync1.c
/* synchronisation de pere et fils par wait
#include <stdio.h>
main()
{
int n;

*/
*/

if ((n=fork()) == -1)
{
printf("Le fork est en erreur \n");
exit(1);
}
else if (n==0)
{
/* on est ds le process fils
*/
printf("identification du processu fils : %d\n",getpid());
sleep(10);
exit(3);
}
else
{
/* on est ds le process pere
*/
int m,n;
/* si le fils se termine normalement par exit le pere recoit
/*
256 fois la valeur de exit*/
/* si le fils se termine par reception de signal -> plante
/* le pere recoit le numero du signal eventuellement augmente
/* de 128 si il y a eu creation de fichier core
m=wait(&n);
printf("fin du process %d avec valeur de retour de wait %d\n",n,m);
}
}

JY CELLE anne 2013-2014

*/
*/
*/
*/

19

processus et signaux - 1/2

La commande kill interromps un processus si celuici n a pas t programm pour trait le signal reu.
Les signaux les plus courants sont

1
2
3
9
15

SIGHUP
SIGINT
SIGQUIT
SIGKILL
SIGTERM

simulation de dconnexion
touche DEL ou SUPPR
idem avec cration de core
arrt immdiat
demande de terminaison

JY CELLE anne 2013-2014

20

processus et signaux - 2/2


PID=1
fork()

init

kill

httpd

sh

PID=382

Processus
dtach
PID=225
# kill -SIGHUP 225 -> renvoie config ou gnre un dump interne
# kill -1 382 -> kill du shell
JY CELLE anne 2013-2014

21

Les processus : Lenvironnement 1/2


PID=1

init

shell de connexion
sh

/etc/profile

$HOME/.profile
TERM=vt220
export TERM
JY CELLE anne 2013-2014

22

Les processus : Lenvironnement 2/2

Lors du fork le fils hrite de son pre

du rpertoire courant (.)


de la variable umask (droit par dfaut)
de la variable ulimit (taille maxi des fichiers)
des variables d environnement : Par exemple

LANG dfinie l'interface avec l'utilisateur


TERM dfinie le terminal utilis
TZ dfinie le fuseau horaire de l utilisateur

$ echo $TZ
MET-1METDST
$ date
jeudi, 22 novembre 2001, 20:51:19 MET
$ export $TZ=GMT
$ date
jeudi, 22 novembre 2001, 20:51:46 GMT
JY CELLE anne 2013-2014

23

commandes de gestion des processus

Les commandes externes

ps -ef
liste des processus
su c ou sudo lance un processus sous un compte

su oracle -c "dbstart" (ncessite le password oracle)


sudo oracle dbstart (ne ncessite pas le password oracle)

at
lance un processus en mode diffr
crontab
lance une application priodiquement

Les commandes internes du shell

cmd &
lance une commande en background
nohup cmd lance une commande en dtache
wait
attend la fin des commande background
sleep n
attend n secondes
exec cmd
substitution de commande
. cmd
excute le script cmd
time cmd
visualise le temps dexcution dun processus
JY CELLE anne 2013-2014

24

commandes de gestion des priorits

Sous Unix pas de priorit mais plutt une


probabilit dligibilit par le swapper
La probabilit est recalcule chaque interruption
du process courant elle est fonction de

temps dexcution
temps dattente
temps pass dans le systme
nice value (entre 0 et 40 par dfaut 20)

La commande nice permet de modifier la nice value

nice incrment commande

0 plus haute priorit


40 plus faible priorit

seul root peut donner une valeur ngative lincrment


Exemple : nice -n 10 find / -size +100000 -ls
JY CELLE anne 2013-2014

25

La commande at

Soumettre une ou plusieurs commandes une


date et heure dtermine
La commande at prend les commandes sur
lentre standard
syntaxe

at [option] [heure] [jour]


option

l liste des batch en attente


rN
supprime le batch N

exemples

at 1230 feb 25
at 4 Saturday
JY CELLE anne 2013-2014

26

Crontab (1/2)
Fichier crontab
/var/spool/cron/crontab/jean
crontab
jean

cron.allow
cron.deny

SPOOL

crond

log

JY CELLE anne 2013-2014

27

Crontab (2/2)
$ more cronfile
* *
*
*
*
0 21
*
*
*
0 0
1
* 1-6
30 12 3,8,15 3-10 *

minutes
(0-59)

heure
(0-23)

date
who
cal

touch .profile
la commande

mois
(1-12)

jour
(1-31)

Jour de la semaine
(0-6) 0:dimanche

La commande crontab
crontab -e
edite le crontab
crontab -l
liste le crontab
crontab -r
supprime son crontab
JY CELLE anne 2013-2014

28

Les bibliothques dynamiques


Les processus
$ calcul
y=sin(x)

printf( );

Les sous programmes


sin

$ compta

printf( );

printf

...
$ ps
PID TTY
TIME
CMD
854
pts/0
00:00:00
1029
pts/0
00:00:00
JY CELLE anne 2013-2014

calcul
compta
29

communication inter-processus

Les moyens standards Unix

Les diffrentes IPC (Inter Process Communication)

les tubes ou pipes (entre process de mme parent)


les tubes nomms
les signaux
les files dattente de messages
les segments de mmoire partage
les smaphores

Les commandes de gestion des IPC

ipcs liste les IPC actifs par type d IPC


ipcrm
permet de dtruire une IPC
sar renseigne sur l utilisation des IPC
JY CELLE anne 2013-2014

30

Les tubes unix ou pipes standards

C'est l'objet le plus courant en environnement Unix.


Il est disponible sur absolument toutes les versions
du march.
Caractristiques:

Moyen de communication lmentaire accessible mme


en shell (le '|').
Unidirectionnel
Opration de lecture destructive
Implment comme un fichier -> associ un inode
Mais pas de nom donc pas rfrenc
Taille gnralement limite 4096 octets

JY CELLE anne 2013-2014

31

Les tubes Unix ou pipes - syntaxe

pipe(p)
int p[2]
p[0] accs en lecture
p[1] accs en criture

Primitive de cration
Seuls des process ayant
communiquer par ce moyen.

une

filiation

peuvent

Un process peut s'en servir comme d'une pile de stockage pour


des donnes.
Une fois ouvert on peut y associer un pointeur de fichier de type
FILE par la primitive fdopen() et ensuite accder au tube par
fread() et fwrite().
Si un process ferme un tube il n'aura plus de moyen de pouvoir le
rouvrir ultrieurement (car pas de descripteur).
Si un procces tente d'crire dans un tube et que tous les
descripteurs en entre sont ferms il reoit le signal SIGPIPE.
JY CELLE anne 2013-2014

32

Les tubes Unix ou pipes - exemple


/* esspipe.c
/* essai de dialogue entre pere et fils par un pipe
/* la lect/ecrit sur pipe creer par 'pipe' est
/* systematiquement avec attente */
#include <stdio.h>
#define NMAX 1000
main()
{
int n,p[2],m;
FILE *in,*out;
/* ouverture pipe */
if (pipe(p))
{
printf("erreur : pipe non ouvert\n");
exit(1);
}
/* association au tube de 2 pointeur FILE
out=fdopen(p[0],"r");
in=fdopen(p[1],"w");
if ((n=fork())==-1)
{
printf("erreur : la creation du fils\n");
exit(2);
}

*/
*/
*/

*/

if (n)
{
/* processus pere */
fclose(out);
/* lecture d'un entier
*/
while (scanf("%d",&m) != EOF)
if (m%2 == 0) fprintf(in,"%d",m);
/* fermeture du pipe en ecriture
*/
fclose(in);
wait(0);
}
else
{
/* processus fils */
int t[NMAX],i=0;
/* fermeture en ecriture indispensable
/* pour atteindre la fin du pipe
*/
fclose(in);
while (fscanf(out,"%d",&m) != EOF)
{
printf("boucle \n");
if (i<NMAX) t[i++]=m;
}
if (i == NMAX) t[NMAX-1]=0;
else t[i]=0;
/*t[(i==NMAX)?NMAX-1:i]=0;*/
for (m=0;m<i;m++) printf("%d\n",t[m]);
}
}

JY CELLE anne 2013-2014

*/

33

Les tubes nomms

Implments sur les systmes Unix depuis le


SYSTEM III en 1981
Mmes caractristiques que les tubes classiques
mais ceux-ci sont rfrencs dans le systme de
fichiers par un nom et de ce fait accessibles tous
les utilisateurs qui en connaissent l'existence et qui
ont les droits sur ceux ci.

JY CELLE anne 2013-2014

34

Les tubes nomms - syntaxe


mknod ("name", mode, dev)
int
string int int

Primitive de cration

dev = 0
Pour mode voir /usr/include/sys/stat.h

Tout process dsirant communiquer sur ce tube nomm


doit donc ouvrir le tube par open() qui lui renverra le
descripteur du tube.

Par dfaut l'ouverture est blocante en read si pas de process en


write et vise versa, sinon positionner le paramtre O_NDELAY
l'ouverture.
Si un process crit dans le pipe et qu'il n'y a pas de lecteur il
recevra le signal SIGPIPE.

JY CELLE anne 2013-2014

35

Les tubes nomms - exemple


/* comfifo1.c
/* process 1 qui ecrit dans pipe nomme ou FIFO
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
main(n,v)
int n;
char *v[];
{
int p;
/* creation du pipe nomme
*/
if (mknod(v[1],S_IFIFO|0666,0))
{
printf("creation impossible\n");
exit(1);
}
/* ouverture du pipe v[1] en ecriture
if ((p=open(v[1],O_WRONLY,0))==-1)
{
printf("ouverture impossible\n");
exit(2);
}
/* ecriture dans le pipe
*/
write(p,"ABCDEFGH",8);
}

*/
*/

*/

/* comfifo2.c
/* process 2 qui lit dans pipe nomme ou FIFO
#include <stdio.h>
#include <fcntl.h>
main(n,v)
int n;
char *v[];
{
int p;
char c;
/* ouverture du pipe v[1] en lecture */
if ((p=open(v[1],O_RDONLY,0))==-1)
{
printf("ouverture impossible\n");
exit(2);
}
/* lecture de 1 caractere
*/
read(p,&c,1);
/* impression du caractere lu
*/
putchar(c);
putchar('\n');
}

JY CELLE anne 2013-2014

*/
*/

36

Les signaux

Moyen de communication trs lmentaire,


l'information est binaire "reue" ou "non reue".
Un fils hrite du comportement du pre vis--vis des
signaux.
La primitive pause() met un process en attente de
l'arrive d'un signal.
La primitive wait() fait de mme mais si le process
n'a pas de fils le retour du wait est immdiat.

JY CELLE anne 2013-2014

37

Les signaux - exemple

/* signal.c
/* test de reception de signal sur tache en attente

*/
*/

#include <stdio.h>
#include <signal.h>
inter()
{
printf("signal recu \n");
}
main()
{
int n;
signal(SIGINT,inter);
n=pause(10);
printf("valeur de retour de pause %d\n",n);
}

JY CELLE anne 2013-2014

38

Les IPC-Inter Process Communication

A partir de SYSTEM V ces nouveaux objets


permettent aux processus de dialoguer entre eux.

Objets externes au systme de fichier (pas d'inode)


primitives de gestion diffrentes des primitives de gestion de
fichiers.

Commandes

visualisation par la commande ipcs.


destruction par :

ipcrm -[q m s] ident


q/m/s pour message queue/shared memory/semaphore
ident reprsente l'identificateur de l'ipc

JY CELLE anne 2013-2014

39

Les IPC (suite)

Chaque IPC est accessible par une cl (type key_t =


long integer) (Cf. nom du FS)
primitive de cration et/ou d'attachement ***get(....)
(Cf. primitive open(...) du FS).

Cette primitive permet d'obtenir l'identificateur interne de


l'ipc identique au descripteur dans le systme de fichier.
La cl de cration peut tre externe, tous les process
peuvent la connatre, ou prive: seul le process qui a cr
l'ipc peut l'accder.

Voir fichiers /usr/include/sys/type.h


/usr/include/sys/ipc.h

JY CELLE anne 2013-2014

40

Les IPC - message queue

Envoi et rception de messages.

actions possible

couple d'informations form d'un numro (type de message)


et d'une chane de caractres (le message).
dans une message queue.
Tous process qui en connat l'existence peut l utiliser.
cration
attachement
lire la structure (nb message, taille, PID, droit)
envoi d'un message
extraction du premier message
extraction du premier message d'un type donn

Voir fichier /usr/include/sys/msg.h


JY CELLE anne 2013-2014

41

Les IPC - shared memory

Partager un segment de mmoire entre diffrents


processus.
Fortement li au type de machine sur laquelle le systme
est implment donc attention la portabilit.
Voir fichier /usr/include/sys/shm.h

JY CELLE anne 2013-2014

42

Les IPC - smaphore

Gestion des conflits d'accs concurrents de process


une mme ressource.
La gestion des smaphore est assez lourde sur Unix car
il existe seulement la structure de l'objet et des primitives
de bas niveau. Il est ncessaire de se construire tous un
jeux de procdures permettant de les mettre en uvres.
Voir fichier /usr/include/sys/sem.h
Trs schmatiquement le smaphore est un compteur avec deux oprations
possibles, l'incrmentation 'V' qui correspond un dverrouillage de la
ressource et la dcrmentation 'P' qui correspond au verrouillage.
Ces oprations sont toutes deux indivisibles. Comme d'autre part la valeur
d'un smaphore est toujours positive ou nulle on voit qu'une demande de
rservation d'un smaphore dj rserv va bloquer le process demandant
jusqu' ce qu'un autre process libre le smaphore.

JY CELLE anne 2013-2014

43

Les messages queues - cration


/* crebal.c
*/
/* essai de creation de boite aux lettres*/
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
extern int errno;
main()
{
key_t cle;
int flag,num,i;
printf("Donner la cle associe a la BAL ;");
scanf("%ld",&cle);
flag=0666|IPC_CREAT;
if ((num=msgget(cle,flag))==-1)
{
printf("creation impossible \n");
printf("erreur %d \n",errno);
exit(1);
}
printf("file creee avec le numero %d\n",num);
}

JY CELLE anne 2013-2014

44

Les messages queues - criture

/* ecribal.c
*/
/* essai d'ecriture de message dans boite aux lettres*/
/* on repere la bal en donnant son identificateur*/
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
extern int errno;
main()
{
int i,num;
long t;
struct msgtext {
long mtype;
char mtext[256];
} message;
struct msqid_ds buf;
printf("Numero de la file ou ecrire \n");
scanf("%d",&num);
if (msgctl(num,IPC_STAT,&buf)==-1)
{
printf("erreur sur la bal recherchee %d\n",errno);
exit(1);
}
/* affichage caracteristique de la bal
*/
printf("Nb de message avant ecriture: %d \n",buf.msg_qnum);
printf("PID dernier process ecrivain: %d \n",buf.msg_lspid);

/* lecture du message a envoyer dans bal


printf("Type du message a envoyer ?");
scanf("%d",&message.mtype);
printf("Texte du message ?");
scanf("%s",message.mtext);

*/

/* envoie du message dans bal */


i=msgsnd(num,&message,strlen(message.mtext),IPC_NOWAIT);
if (i!=0)
{
printf("message non envoye erreur %d\n",errno);
}
else
{
i=getpid();
printf("PID process courrant : %d \n",i);
msgctl(num,IPC_STAT,&buf);
/* affichage caracteristique de la bal
*/
printf("Nb de message apres ecriture: %d \n",buf.msg_qnum);
printf("PID dernier process ecrivain: %d \n",buf.msg_lspid);
}
}

JY CELLE anne 2013-2014

45

Les messages queues - lecture


/* libal.c
*/
/* essai de lecture de message dans boite aux lettres */
/* on repere la bal en donnant sa cle
*/
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
extern int errno;
main()
{
int flag,i,num;
long t;
key_t cle;
struct msgtext {
long mtype;
char mtext[256];
} message;
struct msqid_ds buf;
printf("Donner la cle associe a la BAL ;");
scanf("%ld",&cle);
flag=0666;
if ((num=msgget(cle,flag))==-1)
{
printf("acquisition de la bal impossible \n");
printf("erreur %d \n",errno);
exit(1);
}
printf("l'identificateur de la BAL est %d\n",num);
if (msgctl(num,IPC_STAT,&buf)==-1)
{
printf("erreur sur la bal recherchee %d\n",errno);
exit(1);
}

/* affichage caracteristique de la bal


*/
printf("Nb de message avant lecture: %d \n",buf.msg_qnum);
printf("PID dernier process lecteur: %d \n",buf.msg_lrpid);

/* caracteristiques du message a extraire


*/
printf("Type du message a extraire ?\n");
printf("
0 pour le premier\n");
printf("
>0 pour le premier du type donne\n");
printf("
<0 pour le premier des type superieurs a \n");
scanf("%ld",&t);
/* extraction du message
*/
i=msgrcv(num,&message,100,t,IPC_NOWAIT);
if (i==-1)
{
printf("pas de message erreur %d\n",errno);
}
else
{
i=getpid();
printf("PID process courrant : %d \n",i);
msgctl(num,IPC_STAT,&buf);
/* affichage caracteristique de la bal
*/
printf("Nb de message apres ecriture: %d \n",buf.msg_qnum);
printf("PID dernier process ecrivain: %d \n",buf.msg_lspid);
printf("Type du message %ld\n",message.mtype);
printf("Texte du message %s\n",message.mtext);
}
}

JY CELLE anne 2013-2014

46

Le logiciel libre

UNIX : Un systme conu pour le logiciel libre


BSD : L autre UNIX, la licence BSD
GNU : Le logiciel plus que libre , licence GPL
Linux : Un UNIX libre (GPL)
Les mules :

Xfree86
GNOME, KDE
Apache, Samba
MySQL, PostresSQL

JY CELLE anne 2013-2014

47

Installer une Nelle application


(paquetage)

Tarball = fichier tar compress


Paquetage GNU

Paquetage PKG

gunzip, tar, configure, make, make install


pkgadd -d fichier.pkg
pkgadd -d new_paquetage repertoire
pkginfo
pkginfo -l new_paquetage
pkgrm new_paquetage

Paquetage RPM

rpm
JY CELLE anne 2013-2014

48

Les patches

Patch, diff -e, diff -c


CVS

CSROOT= ; export CVSROOT


cvs login
cvs co ...

Les patch solaris

patchadd, patchrm
les patch cluster

JY CELLE anne 2013-2014

49

Das könnte Ihnen auch gefallen