69 lines
1.3 KiB
Markdown
69 lines
1.3 KiB
Markdown
::::: {.exercice}
|
||
|
||
### Comparaison de *namespace* -- `cmpns.sh`
|
||
|
||
Les *namespaces* d'un programme sont exposés sous forme de liens symboliques
|
||
dans le répertoire `/proc/<PID>/ns/`.
|
||
|
||
Deux programmes qui partagent un même *namespace* auront un lien vers la même
|
||
structure de données.
|
||
|
||
Écrivons un script ou un programme, `cmpns`, permettant de déterminer si deux
|
||
programmes s'exécutent dans les mêmes *namespaces*. On ignorera les
|
||
*namespace*s `*_for_children`, car ils ne font pas partie du cycle d'exécution
|
||
que l'on cherche à comparer.
|
||
|
||
|
||
#### Exemples {.unnumbered}
|
||
|
||
<div lang="en-US">
|
||
```
|
||
42sh$ ./cmpns $(pgrep influxdb) $(pgrep init)
|
||
- cgroup: differ
|
||
- ipc: differ
|
||
- mnt: differ
|
||
- net: differ
|
||
- pid: differ
|
||
- time: same
|
||
- user: same
|
||
- uts: same
|
||
```
|
||
</div>
|
||
\
|
||
|
||
<div lang="en-US">
|
||
```
|
||
42sh$ ./cmpns $(pgrep init) self
|
||
- cgroup: same
|
||
- ipc: same
|
||
- mnt: same
|
||
- net: same
|
||
- pid: same
|
||
- time: same
|
||
- user: same
|
||
- uts: same
|
||
```
|
||
</div>
|
||
|
||
Ici, `self` fait référence au processus actuellement exécuté (comme il existe
|
||
un dossier `/proc/self/`, vous n'avez pas besoin de gérer de cas particulier
|
||
pour ça !).
|
||
|
||
Et pourquoi pas :
|
||
|
||
<div lang="en-US">
|
||
```
|
||
42sh# unshare -m ./cmpns $$ self
|
||
- cgroup: same
|
||
- ipc: same
|
||
- mnt: differ
|
||
- net: same
|
||
- pid: same
|
||
- time: same
|
||
- user: same
|
||
- uts: same
|
||
```
|
||
</div>
|
||
|
||
:::::
|