Можно ли определить интерактивность процесса программно?
Можно ли определить, является ли данный запущенный процесс интерактивным или просто похожим на демон (т. Е. Реальным демоном или tail -f
или аналогичный) с использованием сценариев или любого другого языка?
Если так, то как?
Возможно ли это на более чем одной платформе (чаще всего я использую bash, но решения в других оболочках - даже в PowerShell - тоже приветствуются)?
2 ответа
Исходя из вашего комментария к другому ответу, то, что вы просите, очень сложно.
Вы можете проверить библиотеки, к которым подключается приложение, и, если они управляют экраном (например, ncurses), возможно, они интерактивные. Хотя они могут работать "неинтерактивно (по вашему определению)" в определенных ситуациях запуска.
Я думаю, что лучшее, что вы можете сделать, это использовать strace, который покажет вам системные вызовы, которые использует приложение. Если он читает с fd, который привязан к tty, то он интерактивный.
Если я правильно понимаю ваш вопрос, с ним должен быть связан интерактивный процесс.
Следующее в системе Linux должно дать вам все интерактивные процессы:
ps -e | grep pts