virli/tutorial/4/cmpns.md

66 lines
1.3 KiB
Markdown
Raw Normal View History

2021-10-31 19:51:17 +00:00
\newpage
### Exercice : comparaison de *namespace* -- `cmpns.sh`
2017-11-09 00:30:41 +00:00
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
2021-10-31 19:51:17 +00:00
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.
2017-11-09 00:30:41 +00:00
2021-10-31 19:51:17 +00:00
#### Exemples {.unnumbered}
2017-11-09 00:30:41 +00:00
<div lang="en-US">
```
2017-11-09 00:30:41 +00:00
42sh$ ./cmpns $(pgrep influxdb) $(pgrep init)
- cgroup: differ
- ipc: differ
- mnt: differ
- net: differ
- pid: differ
2021-10-31 19:51:17 +00:00
- time: same
2017-11-09 00:30:41 +00:00
- user: same
- uts: same
```
</div>
<div lang="en-US">
```
2017-11-09 00:30:41 +00:00
42sh$ ./cmpns $(pgrep init) self
- cgroup: same
- ipc: same
- mnt: same
- net: same
- pid: same
2021-10-31 19:51:17 +00:00
- time: same
2017-11-09 00:30:41 +00:00
- user: same
- uts: same
```
</div>
2021-09-11 12:41:43 +00:00
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 !).
2017-11-09 00:30:41 +00:00
Et pourquoi pas :
<div lang="en-US">
```
2021-09-11 12:41:43 +00:00
42sh# unshare -m ./cmpns $$ self
2017-11-09 00:30:41 +00:00
- cgroup: same
- ipc: same
- mnt: differ
- net: same
- pid: same
2021-10-31 19:51:17 +00:00
- time: same
2017-11-09 00:30:41 +00:00
- user: same
- uts: same
```
</div>