2021-01-20 14:53:48 +11:00
|
|
|
\chapter{IPC} \index{IPC}
|
|
|
|
\label{chap:IPC}
|
|
|
|
|
|
|
|
\textit{Inter Process Communication.}
|
|
|
|
|
2021-05-04 19:33:30 +11:00
|
|
|
Il existe deux familles bien distinctes. Nous allons donc
|
2021-08-18 18:49:28 +11:00
|
|
|
les voir dans le plus grand des désordres.
|
2021-05-04 19:33:30 +11:00
|
|
|
|
2021-01-20 14:53:48 +11:00
|
|
|
% ================================================================
|
|
|
|
|
2021-08-18 18:49:28 +11:00
|
|
|
\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}
|
|
|
|
|
2021-08-19 03:52:09 +11:00
|
|
|
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.
|
|
|
|
|
2021-08-18 18:49:28 +11:00
|
|
|
\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}
|
2021-01-20 14:53:48 +11:00
|
|
|
|
2021-08-19 03:52:09 +11:00
|
|
|
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
|
|
|
|
|
2021-01-20 14:53:48 +11:00
|
|
|
% ================================================================
|
|
|
|
|
|
|
|
|
|
|
|
% ================================================================
|
|
|
|
|
2021-08-18 18:49:28 +11:00
|
|
|
\section{shared memory} \index{shared}
|
2021-01-20 14:53:48 +11:00
|
|
|
|
2021-08-18 18:49:28 +11:00
|
|
|
Mémoire partagée.
|
2021-01-20 14:53:48 +11:00
|
|
|
|
|
|
|
% ================================================================
|
|
|
|
|
2021-08-18 18:49:28 +11:00
|
|
|
\section{named pipe}
|
|
|
|
|
|
|
|
Tube nommé.
|
2021-01-20 14:53:48 +11:00
|
|
|
|