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

308
warren

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

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

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

1
Для каких целей? grawity 13 лет назад 0
@gawity - в частности, в продолжение моего предыдущего [вопроса] (http://superuser.com/q/324123/978), но также в целях отчетности / мониторинга warren 13 лет назад 0

2 ответа на вопрос

2
Rich Homolka

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

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

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

+1. Вопрос ОП звучит как проблема коммивояжера. , , surfasb 13 лет назад 0
@surfasb - может быть, то, что я ищу, чрезвычайно сложно / практически невозможно, но всегда стоит попытаться спросить :) warren 13 лет назад 0
@ Warren: Никто не стучит в вопросе. Просто мы пессимистичны, что существует жизнеспособное решение. surfasb 13 лет назад 1
@surfasb - понял полностью ... просто надеясь, что есть * какая-то * форма ответа, отличная от "ты не можешь" или "ты фактически не можешь" warren 13 лет назад 0
0
OldWolf

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

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

ps -e | grep pts 
работает `tail -f / var / log //stderr.log & `также будет связан с tty, но не является интерактивным: - | warren 13 лет назад 0
@warren Эта работа все еще технически интерактивна, если вы не включите ее и не отключите управляющий терминал. По общему признанию небрежная аналогия будет иметь два открытых сеанса терминала и игнорировать запущенный процесс в одном из терминалов. Процесс все еще интерактивный, вы просто не обращаете на него внимания. Какую общую проблему вы пытаетесь решить? OldWolf 13 лет назад 0
`tail` - неинтерактивная программа: она просто отображает содержимое файла (или аналогичного). Я пытаюсь определить с помощью скрипта или другого инструмента, запускает ли пользователь что-то вроде emacs, vi, less и т. Д., А не что-то вроде cat, tail или head warren 13 лет назад 0

Похожие вопросы