A ferramenta mais útil é o lsof . Ele mostra quais arquivos estão em uso por quais processos. Se /media/KINGSTON
for um ponto de montagem (o nome do dispositivo também funcionaria), o comando a seguir mostrará todos os arquivos em uso neste ponto de montagem:
lsof /media/KINGSTON
Se você executar este comando como um usuário comum, ele só mostrará seus próprios processos¹. Execute sudo lsof /media/KINGSTON
para ver todos os processos dos usuários.
A saída de lsof
é assim:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zsh4 31421 gilles cwd DIR 8,1 4096 130498 /var/tmp
zsh4 31421 gilles txt REG 8,1 550804 821292 /bin/zsh4
zsh4 31421 gilles mem REG 8,1 55176 821326 /usr/lib/zsh/4.3.10/zsh/complist.so
zsh4 31421 gilles 12r REG 8,1 175224 822276 /usr/share/zsh/functions/Completion.zwc
A coluna COMMAND
mostra o nome do executável do programa e a coluna PID
mostra o ID do processo. A coluna NAME
mostra o nome do arquivo; você pode ver (deleted)
se o arquivo foi excluído enquanto aberto (quando um arquivo é excluído, ele não tem mais um nome, mas ele ainda existe até que o último processo usando ele feche o arquivo). USER
deve ser autoexplicativo. As outras colunas não importam aqui, exceto talvez FD
, que mostra como o arquivo é usado pelo processo:
-
cwd
: diretório de trabalho atual
-
txt
: o executável do programa²
-
mem
: um arquivo mapeado na memória (aqui, pense nele como um arquivo aberto)
- um número: um arquivo aberto real; uma letra subsequente indica o modo de abertura, como
r
para leitura e w
para gravação
Não existe uma maneira mecânica de localizar a janela onde um arquivo está aberto (isso não é tecnicamente significativo: se um processo tiver várias janelas, um arquivo não está particularmente associado a uma janela ou outra), nem mesmo qualquer simples maneira de identificar a janela de um processo (e, claro, um processo não precisa ter janelas). Mas geralmente o nome do comando e o nome do arquivo são suficientes para localizar o ofensor e fechar o arquivo corretamente.
Se você não conseguir fechar o arquivo e apenas terminar tudo, poderá eliminar o processo com kill 31421
(onde 31421
é o ID do processo) ou kill -HUP 31421
("desligar"). Se matar simples não resolver o problema, mate com extremo preconceito: kill -KILL 31421
.
Existe uma GUI para lsof, glsof , mas ainda não está pronta para o horário nobre e não é empacotado para o Ubuntu até agora.
O Lsof pode listar algumas informações sobre os processos de outros usuários, mas não detecta o ponto de montagem, portanto, não os listará se você especificar um ponto de montagem.
²
O código executável costuma ser chamado de texto nas discussões de formatos executáveis.