Este é um problema que venho tentando resolver sozinho por algum tempo sem qualquer sorte. Estou tentando escrever um script que (entre outras coisas) pode pegar um PID arbitrário e mapeá-lo para o caminho do dispositivo TTY (a função que estou escrevendo retornará "(notty)" se não houver um TTY associado).
Na minha tentativa de fazer o acima, estou tentando usar o tty_nr em / proc / [pid] / stat:
tty_nr %d (7) The controlling terminal of the process. (The
minor device number is contained in the
combination of bits 31 to 20 and 7 to 0; the major
device number is in bits 15 to 8.)
Eu posso extrair os números maiores e menores, sem problemas. Meu problema entra em cena quando tento traduzi-lo para um caminho de dispositivo: Eu apenas faço um find
sob / dev para uma correspondência e aceito a primeira? Existe uma maneira mais elegante de fazer isso?
Eu encontrei isto e parece que o O script python tem algum tipo de mapeamento de números tty_nr para caminhos físicos, mas não consigo encontrar qualquer outra parte do script que realmente preencha essa lista para ver de onde eles estão obtendo seus dados para ver se consigo criar um análogo do Linux. Também é possível que isso dependa de algum BSD-ismo, mas eu encontrei uma parede de tijolos.
Basicamente, estou tentando não iniciar outro processo se puder ajudar. Além disso, toda a abordagem "inicie um processo com um número desconhecido de resultados, mas apenas o primeiro resultado" parece meio que ... kludgy. Como tenho que mostrar esse código para outras pessoas, gostaria de ter uma maneira mais ou menos determinista de realizar isso. Eu gostaria de ter alguma garantia de que se (por algum motivo) existirem vários arquivos de dispositivos abaixo de / dev com esse major / menor (eu sei, mas isso me irritará) que meu código será padronizado para qualquer caminho "oficial" para o TTY é.
É claro que se minhas preocupações com o não-determinismo do método "extrai-e-buscas" forem infundadas, isso seria uma boa notícia, eu gostaria apenas de entender por que elas são infundadas. Tudo mais falha Eu acho que poderia tentar buscas restritas por caminhos comuns (/ dev / pts * / dev / tty * etc) antes de passar para uma varredura de todos os / dev.