Perché il comando "xterm xterm" crea una ricorsione infinita?


31

Sto eseguendo Ubuntu 14.04 (64 bit). Quando ho scoperto per la prima volta il comando xterm, ho provato il comando xterm xterme ha iniziato ad aprire continuamente nuove finestre xterm.
ctrl + Clo ferma immediatamente e chiude tutte le finestre.

Ma volevo vedere fino a che punto arriva e lasciarlo correre il più a lungo possibile. Ha mangiato quasi tutta la RAM e alla fine è stato chiuso (penso dal sistema stesso).

Quindi, solo per curiosità, perché / come succede?


3
Fuori tema: era chiuso perché probabilmente utilizzava troppa memoria e veniva ucciso dall'omicida OOM (memoria insufficiente).
Léo Lam,

5
Questo dovrebbe essere risolto dalla versione 301 : "imposta SHELLla variabile d'ambiente solo sui programmi trovati /etc/shells(richiesto da patch / report di Al Poole)". (Le risposte spiegano cosa c'è con la SHELLvariabile d'ambiente).
Cristian Ciupitu,

@CristianCiupitu - +1 - Ho appena installato la versione 308 - e invece di aprire terminali ricorrenti, ne apre uno vuoto e un secondo con bash (il secondo presumibilmente è la 'shell' del primo xterm.
Wilf

Risposte:


26

Suppongo che questo sia perché il primo parametro che dai xtermè la shell da usare - xterm bash(o xterm /bin/bash), xterm pythonecc.

Quindi funziona xterm, cerca di iniziare xtermcome una shell, che ne avvia un'altra xtermcome quella shell, poi un'altra e un'altra ...

Probabilmente puoi trovare un po 'di più su questo eseguendo man xterm


24
Sì. Il primo xtermset $SHELLdi xterme inizia un altro xtermcome suo involucro. Quell'altro xtermusa il comando in $SHELLquanto è shell, quindi ne inizia un altro xterm, ...
Florian Diesch,

6
Questa parte della risposta non è chiara: "che inizia un'altra xtermcome quella shell". Perché succede? Grazie @FlorianDiesch per aver spiegato quella parte.
John Kugelman sostiene Monica il

@JohnKugelman - il primo xterminizia il secondo xtermcome shell, il secondo xterminizia il terzo xtermcome shell, il terzo inizia il quarto come shell ... ecc.
Wilf

3
Capisco perché il primo xterminizia il secondo xterm: è perché hai digitato xterm xterm. Ma perché il secondo xterminizia il terzo xterm? Non hai digitato xterm xterm xterm, quindi non è ovvio il motivo per cui il terzo xterminizia. Il commento di Florian spiega perché.
John Kugelman sostiene Monica il

1
Quindi solo per curiosità è possibile anche con gnome-terminal?
TuKsn,

16

Versione breve: l'argomento di xterm è la shell da eseguire con xterm; shell è impostata in ambiente var, quindi ulteriori chiamate eseguono una 10 PRINT "xterm" 20 GOTO 10ricorsione.

Versione lunga:

  1. xterm xtermpassa xtermalla chiamata xterm come shell di xterm impostando la $SHELLvariabile su xterm(il primo parametro di xterm viene interpretato come shell da eseguire)
  2. quindi, xterm eseguito dal tuo xterm xtermcomando esegue il $SHELL- in questo caso, creando un'altra istanza xterm (perché $SHELL=xtermadesso)
  3. $SHELL=xterm già, quindi viene eseguito il xterm appena creato xterm
  4. vai a 3

Ulteriori letture: man xterm

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.