Традиционное решение этой проблемы - опция в командной строке.Такие программы, как правило, демонизируют себя, если им не предоставлена специальная опция отладки, говорящая им об этом.
Другим решением будет использование сценария оболочки для запуска программы как демона с помощью команды nohup
(и перенаправления стандартаввод и вывод в /dev/null
).
Что касается определения, является ли управляющий терминал локальным или нет, это может быть затруднительно;и X, и Telnet используют виртуальные терминалы, поэтому, если вы работаете в X, вы не сможете различить сеанс Telnet и локальное окно xterm.Тем не менее, возможно, стоит попробовать ... В Linux /proc/<procid>/fd/0
- это символическая ссылка на устройство, подключенное к стандарту в (fd 0): используя что-то вроде readlink
, вы сможете определить фактическое имя.Или fstat
даст вам старшие и младшие номера устройства.Учитывая это, вы могли бы быть в состоянии определить, что есть что.Если ваш локальный терминал не находится под X, но является реальным терминалом, он определенно будет иметь младший номер, отличный от псевдотерминала.Для xterms возможно, что младшие номера псевдотерминалов попадают в разные диапазоны, или даже что существуют различные наборы псевдотерминалов для удаленных каналов и для X;вам, вероятно, придется поэкспериментировать, и может не быть рабочего решения.(Для начала, на tty
на каждом терминале, и посмотрите, что там написано. У меня нет локального доступа к машине Linux, чтобы проверить, но я, кажется, помню, что в Solaris терминалы X имели имена вроде /dev/ttyxx
;мои удаленные терминалы в Linux здесь /dev/pts/xx
. (где xx
- число в каждом случае.)