Я использую Ubuntu 14.04 (64 бит). Когда я впервые узнал о команде xterm
, я попробовал команду xterm xterm
, и она начала бесконечно открывать новые окна xterm.
ctrl + C
немедленно останавливает его и закрывает все окна.
Но я хотел посмотреть, как далеко он зайдет, и позволить ему бегать так долго, как может. Он израсходовал почти всю оперативную память и в конечном итоге был закрыт (я думаю, сама система).
Так просто из любопытства, почему / как это происходит?
command-line
xterm
CluelessNoob
источник
источник
SHELL
переменные окружения только для программ, найденных в/etc/shells
(вызвано патчем / отчетом от Al Poole)». (Ответы объясняют, что сSHELL
переменной среды).Ответы:
Я (думаю), это потому, что первый параметр, который вы даете,
xterm
это оболочка для использования -xterm bash
(илиxterm /bin/bash
) иxterm python
т. Д.Таким образом, он запускается
xterm
, пытается запуститьxterm
как оболочку, которая запускает другуюxterm
как эту оболочку, затем другую и другую ...Вы можете найти немного больше об этом, запустив
man xterm
источник
xterm
наборы$SHELL
кxterm
и начинается другое ,xterm
как его оболочки. Этот другойxterm
использует команду в$SHELL
качестве оболочки, таким образомxterm
,xterm
как оболочку». Почему это происходит? Спасибо @FlorianDiesch за объяснение этой части.xterm
запускает второй вxterm
качестве оболочки, второйxterm
запускает третий вxterm
качестве оболочки, третий запускает четвертый в качестве оболочки ... и т. Д.xterm
начинает второйxterm
: это потому, что вы напечаталиxterm xterm
. Но почему второйxterm
начинает третийxterm
? Вы не печаталиxterm xterm xterm
, так что не понятно, почемуxterm
начинается третий . Комментарий Флориана объясняет почему.gnome-terminal
?Краткая версия: аргумент xterm - это оболочка для выполнения xterm; shell устанавливается в среде var, поэтому дальнейшие вызовы выполняют
10 PRINT "xterm" 20 GOTO 10
рекурсию.Длинная версия:
xterm xterm
переходитxterm
к вызову xterm в качестве оболочки xterm, устанавливая$SHELL
переменную вxterm
(1-й параметр xterm интерпретируется как оболочка для выполнения)xterm xterm
командой, выполняет$SHELL
- в этом случае, создавая другой экземпляр xterm (потому что$SHELL=xterm
сейчас)$SHELL=xterm
уже, поэтому вновь созданный xterm выполняетxterm
Дальнейшее чтение:
man xterm
источник