Вобщем хотелось бы знать запущена прога с & или без &, т.е. есть ли связанный с ней терминал. Это было бы удобно для отключения вывода дебажной инфы на stdout.
Месяц назад обсуждалось тут, http://www.linux.org.ru/profile/_white2/view-message.jsp?msgid=149787&scr... Дублирую сюда мой вариант: Вообще-то, зависит от системы/шелла. Под Линуксом можно так (не гарантирую, что это - наипростейший способ): 1. Узнаем наш PID и ломимся в соответствующую директорию /proc 2. Смотрим файл stat. Он состоит из полей: pid comm state ppid pgrp session tty tpgid и т.д. Поле comm в скобочках, поле state - большая буква. Нас интересуют поля pgrp и tpgid. pgrp - id группы процесса, а tpgid - id группы, владеющей управляющим терминалом данного процесса. Если они равны, то данный процесс пишет на свой терминал. Если они не равны, то процесс будет писАть в лучшем случае на чужой терминал.
2asd (*) (2002-02-26 15:30:17.0):
> Месяц же назад, привели правильный ответ: man isatty
Ответ неверный. Если мне не веришь, попробуй isatty в программе,
запушенной с &.
Из той же дискуссии:
Check if standard input is a terminal:
sh: if [ -t 0 ]; then ... fi
C: if(isatty(0)) { ... }
In general, you can't tell if you're running in the background.
> А хождение в /proc и т.д. это грязный хак, не портируемый и вообще
> некрасивый :))
Но, похоже, единственный.
In general, you can't tell if you're running in the background.
The fundamental problem is that different shells and different
versions of UNIX have different notions of what "foreground" and
"background" mean
В смысле - "с & или без &, т.е. есть ли связанный с ней терминал"?
Если софтина сама не закроет потоки 0, 1 и 2, не форкнет потомка,
который станет затем лидером группы, связанный с ней терминал будет
всегда.
ЗЫ: a что, лень ls -la /proc/<PID>/fd/ cделать и посмотреть, какие
дескрипторы открыты?