virli/tutorial/4/cmpns.md
2022-11-11 10:14:16 +01:00

71 lines
1.4 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

::::: {.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 le même
*inode*.
Écrivons un script, `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.
En shell, vous aurez besoin de `grep(1)` et de `readlink(1)`.
#### Exemples {.unnumbered}
<div lang="en-US">
```
42sh$ docker run -d influxdb
42sh$ ./cmpns $(pgrep influxd) $(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>
:::::