Как я могу определить, выполняется ли мой процесс в интерактивном режиме?

Существует ли стандартный (ish) способ POSIX для определения того, выполняется ли мой процесс (я сейчас пишу это как скрипт Ruby; но мне любопытно, что несколько сред, включая Node.js и приложения командной строки ISO C) запускать в интерактивном терминале, в отличие, скажем, cron, или выполнение из другого инструмента, или… и так далее, и так далее.

В частности, мне нужно получить пользовательский ввод в определенных ситуациях, и мне нужно фатально потерпеть неудачу, если это определенно невозможно (т. Е. Выполняется cron.) Я могу сделать это с помощью переменной окружения, но я бы предпочел что-то более стандартное. иш, если смогу

3 ответа

Решение

Я всегда использовал $stdout.isatty чтобы проверить это. Другие подходы могут включать проверку значения ENV['TERM'] или используя драгоценный камень ruby-terminfo.

AFAIK, ближайший к вам, isatty (). Но, как говорит сама страница, ничто не гарантирует, что человек управляет терминалом.

Как @Mitch написал это в комментарии, что также может быть полезно для некоторых людей:

Для тех, кто пришел сюда в поисках окон, попробуйте System.Environment.UserInteractive для.Net или GetUserObjectInformation для win32, которая не работает для неинтерактивных процессов

Другие вопросы по тегам