Se você estiver usando isso como bloqueio, não funcionará como lsof
ou fuser
para evitar condições de corrida.
O processo básico que lsof
faz é percorrer todos os processos /proc/*/fs
procurando por descritores de arquivos abertos. Isso vai levar tempo, não importa o que você faça.
Você pode fazer isso sozinho, mas provavelmente não será mais rápido, pois você precisa verificar cada processo aberto no sistema.
Se o que você está fazendo for crítico, descubra outra maneira de fazê-lo.
- Se você controlar o arquivo por meio de um programa que você escreveu; use um arquivo de bloqueio.
- Se você estiver executando algum comando que opera no arquivo, veja e veja a documentação que o comando / programa oferece e veja se ele não pode fazer um arquivo de trava. Caso contrário, veja se não pode fazer um arquivo com o seu PID dentro dele. Então você pode olhar para
/proc/<PID>/fs
para ver se seu arquivo está aberto ou não. Observar apenas um processo de descritores de arquivos abertos será muito mais rápido do que o mapeamento em todos eles. - Caso contrário, para ajudá-lo, necessitarei de mais informações sobre o que você está fazendo.
Você forneceu mais informações em um comentário que deseja determinar se o Firefox está sendo executado em um determinado sistema. A melhor maneira de fazer isso é procurar por arquivos de bloqueio do Firefox. Estes são armazenados em locais padrão especificados no wiki da Mozilla.
Por exemplo, no linux, faça o seu programa fazer o seguinte:
- abra o diretório
~/.mozilla/firefox/
. - Listar todos os diretórios, filtrando os diretórios que terminam em
.default
. (Acho que todos os perfis terminam com.default
, se não apenas rastreiam em todos os diretórios.) - Em cada diretório acima, procure a existência de um arquivo chamado
lock
ou.parentlock
. Se você vir um ou ambos os arquivos, o Firefox está aberto.
Este algoritmo deve ser executado mais rapidamente do que o que você faz no Windows atualmente.