O que é incomum aqui é que o open de /proc/pid/stack é bem-sucedido, mas uma tentativa de read dele retorna EPERM .
O código-fonte do kernel para mostrar o conteúdo de /proc/pid/stack , fs/proc/base.c:proc_pid_stack() , chama lock_trace() , que retornará um erro de permissão se o chamador não tiver acesso a ptrace o processo alvo.
Em muitas distribuições do Linux, existem módulos de segurança do Linux que podem restringir o uso de ptrace . Um deles é Yama , que você encontrará se usar o Ubuntu. A permissão para usar ptrace está restrita a raiz ou a um processo de ancestral (geralmente o pai) do destino. Você pode verificar isso com
root@ubuntu:~# cat /proc/sys/kernel/yama/ptrace_scope
1
E pode desativá-lo fazendo
root@ubuntu:~# echo 0 > /proc/sys/kernel/yama/ptrace_scope
A partir daí, você poderá cat /proc/pid/stack .