Conforme descrito nesta resposta útil , os efeitos de -n
( unshare(CLONE_NEWPID)
) só entram em conta para o primeiro processo filho bifurcado.
Em particular, homem 2 sem compartilhamento diz sobre CLONE_NEWPID
:
Unshare the PID namespace, so that the calling process has a new PID namespace for its children which is not shared with any previously existing process.
The calling process is not moved into the new namespace.
The first child created by the calling process will have the process ID 1 and will assume the role of
init(1)
in the new namespace.
Corrigindo unshare
para tornar o trabalho de matar confiável
Desde que fiz minha pergunta, nas últimas duas horas eu escrevi um patch para util-linux
( pull request aqui ) que adiciona um sinal --kill-child
a unshare
.
Edit: Isso agora é mesclado e liberado como parte do util-linux v2.32
.
Você pode usá-lo assim:
unshare -fp --kill-child -- bash -c "watch /bin/sleep 10000 && echo hi"
e a morte de unshare
irá derrubar toda a árvore de processos conforme expulso.
Sem root
Você pode até usá-lo sem root
privileges se o seu kernel tiver namespaces de usuário habilitados ( CONFIG_USER_NS=y
) passando o sinal -U
:
unshare -Ufp --kill-child -- bash -c "watch /bin/sleep 10000 && echo hi"