Можно ли программно определить интерактивность процесса?

Можно ли программно определить интерактивность процесса?

Можно ли определить, является ли данный запущенный процесс интерактивным или просто демоноподобным (т. е. настоящим демоном, или чем- tail -fто подобным), используя скрипты или любой другой язык?

Если да, то как?

Возможно ли это на нескольких платформах (чаще всего я использую bash, но решения в других оболочках, даже PowerShell, также были бы приветствоваться)?

решение1

исходя из вашего комментария к другому ответу, то, о чем вы просите, очень сложно.

Вы можете проверить библиотеки, к которым подключается приложение, и если они являются элементами управления экраном (например, ncurses), то, вероятно, они интерактивны. Хотя они могут работать «неинтерактивно (по вашему определению)» в определенных ситуациях запуска.

Я думаю, лучшее, что вы можете сделать, это использовать strace, который покажет вам системные вызовы, используемые приложением. Если оно читает с fd, подключенного к tty, то оно интерактивное.

решение2

Если я правильно понял ваш вопрос, интерактивный процесс должен иметь связанный с ним tty.

В системе Linux следующая команда должна предоставить вам все интерактивные процессы:

ps -e | grep pts

Связанный контент