1.3 KiB
1.3 KiB
\newpage
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
namespaces *_for_children
, car ils ne font pas partie du cycle d'exécution
que l'on cherche à comparer.
Exemples
```
42sh$ ./cmpns $(pgrep influxdb) $(pgrep init)
- cgroup: differ
- ipc: differ
- mnt: differ
- net: differ
- pid: differ
- time: same
- user: same
- uts: same
```
```
42sh$ ./cmpns $(pgrep init) self
- cgroup: same
- ipc: same
- mnt: same
- net: same
- pid: same
- time: same
- user: same
- uts: same
```
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 :
```
42sh# unshare -m ./cmpns $$ self
- cgroup: same
- ipc: same
- mnt: differ
- net: same
- pid: same
- time: same
- user: same
- uts: same
```