You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.1 KiB
74 lines
2.1 KiB
\chapter{IPC} \index{IPC} |
|
\label{chap:IPC} |
|
|
|
\textit{Inter Process Communication.} |
|
|
|
Il existe deux familles bien distinctes. Nous allons donc |
|
les voir dans le plus grand des désordres. |
|
|
|
% ================================================================ |
|
|
|
\section{Signal} \index{signal} |
|
|
|
nous allonc commencer par le plus simple mécanisme d'IPC~: |
|
le signal. |
|
Et pour ça, nous allons utiliser (encore une fois ?) un exemple |
|
futile, certes, mais simple à comprendre. |
|
|
|
Nous avons un programme qui tourne en boucle en effectuant des |
|
taches complexes (simulées pour l'exemple par une nanosieste) et |
|
nous souhaitons pouvoir lui demander d'afficher l'avancée de la |
|
chose. |
|
|
|
\label{get-signal} |
|
\lstinputlisting[language=c]{code/get-signal.c} |
|
|
|
Quand ce processus recevra le signal, la fonction \texttt{attraper} |
|
sera appelée de façon \textsl{asynchrone} et positionnera le drapeau. |
|
C'est dans le terme \textsl{asynchrone} que le diable a caché |
|
les détails. |
|
|
|
\begin{verbatim} |
|
fubar $ ./get-signal & |
|
[1] 14001 |
|
fubar $ kill me, my pid is 14001 |
|
kill -USR1 14001 |
|
fubar $ count is 22 |
|
kill %1 |
|
fubar $ |
|
[1]+ Terminated ./get-signal |
|
fubar $ |
|
\end{verbatim} |
|
|
|
Comme on peut le constater, le principe est simple. Un signal est |
|
une interruption d'un processus qui, en dehors de sa présence, ne |
|
transfère que peu d'information. Le principe est simple, d'accord, |
|
mais la mise en œuvre l'est moins. |
|
Cet exemple peut être considéré comme obsolète, et la |
|
\textsl{manpage}\footnote{Mais qui lit le man, de nos jours ?} |
|
confime bien. |
|
|
|
\begin{quote} |
|
The only portable use of signal() is to set a signal's disposition to |
|
SIG\_DFL or SIG\_IGN. The semantics when using signal() to establish a |
|
signal handler vary across systems (and POSIX.1 explicitly permits this |
|
variation); \textbf{do not use it for this purpose}. |
|
\end{quote} |
|
|
|
Vous voilà prévenus, la suite bientôt\dots |
|
|
|
% ================================================================ |
|
|
|
|
|
% ================================================================ |
|
|
|
\section{shared memory} \index{shared} |
|
|
|
Mémoire partagée. |
|
|
|
% ================================================================ |
|
|
|
\section{named pipe} |
|
|
|
Tube nommé. |
|
|
|
|