Essa é uma rotunda e um método grosseiramente impreciso. Você sabe a localização do arquivo da biblioteca, portanto, não é necessário usar a heurística para corresponder a ele. Você pode pesquisar o caminho exato.
Existe uma maneira muito simples de listar os processos com um arquivo aberto:
fuser /lib/x86_64-linux-gnu/libc.so.6
No entanto, isso lista os processos que abrem a versão atual do arquivo, ou seja, os processos que usam a nova cópia da biblioteca. Se você deseja listar os processos que possuem a cópia excluída, use lsof
, mas procurando um caminho exato. Restringir lsof
ao sistema de arquivos que contém o arquivo excluído para desempenho (e possivelmente para evitar o bloqueio, por exemplo, de sistemas de arquivos de rede temporariamente inacessíveis).
lsof -o / | awk '$4 == "DEL" && $8 == "/lib/x86_64-linux-gnu/libc-2.13.so" {print $2}'
Se o pacote atualizado contiver várias bibliotecas e você quiser detectar qualquer uma das bibliotecas, liste todos os arquivos de biblioteca do pacote. Aqui está uma maneira de fazer isso programaticamente (para um pacote Debian, ajuste de acordo com sua distribuição, por exemplo, rpm -ql glibc
na Red Hat).
lsof -o / | awk '
BEGIN {
while (("dpkg -L libc6:amd64 | grep \\.so\$" | getline) > 0)
libs[$0] = 1
}
$4 == "DEL" && $8 in libs {print $2}'