LINUX.ORG.RU

Месяц назад обсуждалось тут, 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 группы, владеющей управляющим терминалом данного процесса. Если они равны, то данный процесс пишет на свой терминал. Если они не равны, то процесс будет писАть в лучшем случае на чужой терминал.

Die-Hard ★★★★★
()

А зачем так извращаться? Проще отправить stdout и stderr в /dev/null

Antichrist
()

2 Die-Hard:
Месяц же назад, привели правильный ответ: man isatty
А хождение в /proc и т.д. это грязный хак, не портируемый и
вообще некрасивый :))

asd
()
Ответ на: комментарий от asd

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

Die-Hard ★★★★★
()

2Die-Hard (*) (2002-02-26 16:03:25.0):

Да, виноват, в суть вопроса не вдумался :((

asd
()

В смысле - "с & или без &, т.е. есть ли связанный с ней терминал"?
Если софтина сама не закроет потоки 0, 1 и 2, не форкнет потомка,
который станет затем лидером группы, связанный с ней терминал будет
всегда.
ЗЫ: a что, лень ls -la /proc/<PID>/fd/ cделать и посмотреть, какие
дескрипторы открыты?

Druker
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.