Estou tentando escrever um script bash de 1 linha que obterá todos os PIDs de processos que se parecem com processos do kernel e verificará se eles têm conteúdo em /proc/*/maps
, o que indica o mascaramento do processo do kernel.
Atualmente tenho o seguinte script:
for pid in $(ps aux | grep "\[" | awk -F' ' '{print $2}');do if [ -s /proc/$pid/maps ]; then echo $pid; fi; done
O script deve gerar o pid se o /proc/$pid/maps
tamanho for maior que 0. No entanto, o script não produz nada.
if [ -s /proc/$pid/maps ]
deve indicar se o arquivo não está vazio. Não parece estar funcionando.
Eu poderia contornar isso usando outro método, mas essa -s
opção é o que a internet recomenda para verificar se um arquivo está vazio ou não.
Qual é o problema aqui? Eu sei que há um processo com um colchete em sua linha de comando (avahi daemon) que terá conteúdo em /proc/$pid/maps
, portanto, deve haver pelo menos 1 saída pid para fins de teste. Se eu remover o grep do pipe, para que ele itere sobre todos os pids, ainda não haverá saída.
O problema é que os arquivos sob
/proc/$pid
têm um tamanho aparente de 0, independentemente de seu conteúdo; comparar as saídas dee
Para verificar o tamanho de
/proc/$pid/maps
você precisa realmente lê-lo, usando, por exemplowc -c
, como acima.