Como obter processos atualmente executando semáforos por / proc?
16
Gostaria de saber como obter processos atualmente executando semáforos por /proc? Eu acho que é possível pelo subdiretório SysVIPC. Mas eu não sei como usar esses comandos.
Em /proc/PID/maps, você pode ver o mapeamento de memória de um processo e os semáforos POSIX aparecem como arquivos anexados /dev/shm. Não tenho certeza sobre os semáforos SysV embora.
Lgeorget
O @lgeorget e eu confirmamos que os semáforos POSIX e SysV aparecem de fato no /proc/PID/mapsarquivo para um determinado PID.
slm
Mas, aparentemente, os fragmentos de memória compartilhada também aparecem como entradas /dev/shme são bastante indistinguíveis dos semáforos (exceto se tiverem nomes inteligentes).
Lgeorget 12/05
Respostas:
21
Minha única experiência em lidar com semáforos e memória compartilhada é através do uso do comando ipcs. Dê uma olhada na página de manual do ipcs para obter mais detalhes.
Este comando mostra quais processos têm semáforos:
Até onde eu sei, apenas os semáforos do System V (aqueles com os quais você se relaciona semget(2)) são exibidos; ipcs -sportanto, se você estiver usando os semáforos POSIX (aqueles com quem se relaciona sem_open(2)), precisará usar outro método.
Lgeorget
Conhece algum comando do terminal que retornará a variedade sem_open (2)? Apenas curioso. Tudo o que sei sobre semáforos está na resposta acima 8-).
slm
Não, esse é o problema. ;) Como a página de ipcsmanual diz: "O utilitário Linux ipcs não é totalmente compatível com o utilitário POSIX ipcs." então não tenho certeza de que eles tenham pensado em algo para o POSIX IPC. Talvez uma versão futura de ipcs:).
Lgeorget
o conteúdo do mapsão ambas as variedades de semáforos pensadas, correto?
slm
Eu acho. De uma forma ou de outra, os semáforos precisam ser anexados em algum lugar da memória do processo. Mas não tinha certeza de que os semáforos SysV também foram criados no pseudo-sistema de arquivos /dev/shm. Agora, temos a resposta. :)
/proc/PID/maps
, você pode ver o mapeamento de memória de um processo e os semáforos POSIX aparecem como arquivos anexados/dev/shm
. Não tenho certeza sobre os semáforos SysV embora./proc/PID/maps
arquivo para um determinado PID./dev/shm
e são bastante indistinguíveis dos semáforos (exceto se tiverem nomes inteligentes).Respostas:
Minha única experiência em lidar com semáforos e memória compartilhada é através do uso do comando
ipcs
. Dê uma olhada na página de manual do ipcs para obter mais detalhes.Este comando mostra quais processos têm semáforos:
Com o semid conhecido, podemos consultar informações adicionais sobre os PIDs que possuem semáforos (observe que há 8 - a coluna nsems):
A coluna pid são esses processos. Você pode procurá-los usando
ps
ou procurar no/proc
sistema de arquivos/proc/<pid>
.Por exemplo:
POSIX e SystemV
Com base em um comentário deixado por @lgeorget, procurei no
/proc/2265/map
conteúdo do meu PID 2265 e encontrei as seguintes/dev/shm
referências:fonte
semget(2)
) são exibidos;ipcs -s
portanto, se você estiver usando os semáforos POSIX (aqueles com quem se relacionasem_open(2)
), precisará usar outro método.ipcs
manual diz: "O utilitário Linux ipcs não é totalmente compatível com o utilitário POSIX ipcs." então não tenho certeza de que eles tenham pensado em algo para o POSIX IPC. Talvez uma versão futura deipcs
:).map
são ambas as variedades de semáforos pensadas, correto?/dev/shm
. Agora, temos a resposta. :)