virli/tutorial/4/cmpns.md

1.4 KiB

::::: {.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 namespaces *_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

``` 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 ```
\
``` 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 ```

:::::