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

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

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

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

2 ответа

Решение

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

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

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

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

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

ps -e | grep pts
Другие вопросы по тегам