A interatividade de um processo pode ser determinada programaticamente?

A interatividade de um processo pode ser determinada programaticamente?

É possível determinar se um determinado processo em execução é interativo ou meramente semelhante a um daemon (ou seja, um daemon real, ou um tail -f, ou similar) usando scripts ou qualquer outra linguagem?

Se sim, como?

É possível em mais de uma plataforma (eu uso o bash com mais frequência, mas soluções em outros shells - até mesmo no PowerShell - também seriam apreciadas)?

Responder1

com base no seu comentário à outra resposta, o que você está pedindo é muito difícil.

Você pode verificar as bibliotecas às quais o aplicativo se conecta e, se elas controlam a tela (por exemplo, ncurses), provavelmente é interativo. Embora estes possam ser executados 'não interativos (por sua definição)' em determinadas situações de execução.

Acho que o melhor que você pode fazer é usar strace, que mostraria os syscalls que o aplicativo usa. Se estiver lendo um fd anexado a um tty, será interativo.

Responder2

Se entendi sua pergunta corretamente, um processo interativo deve ter um tty associado a ele.

O seguinte em um sistema Linux deve fornecer todos os processos interativos:

ps -e | grep pts

informação relacionada