web-dev-qa-db-fra.com

Pourquoi la commande "xterm xterm" crée-t-elle une récursion infinie?

J'utilise Ubuntu 14.04 (64 bits). Quand j'ai découvert la commande xterm pour la première fois, j'ai essayé la commande xterm xterm et elle a commencé à ouvrir indéfiniment de nouvelles fenêtres xterm.
ctrl + C l'arrête immédiatement et ferme toutes les fenêtres.

Mais je voulais voir jusqu'où cela pouvait aller et le laisser courir aussi longtemps qu'il le pouvait. Il a mangé presque tout le RAM et a finalement été fermé (je pense par le système lui-même).

Alors simplement par curiosité, pourquoi/comment cela se produit-il?

31
CluelessNoob

J'imagine que c'est parce que le premier paramètre que vous donnez à xterm est le Shell à utiliser - xterm bash (ou xterm /bin/bash), xterm python etc.

Donc, il exécute xterm, essaye de démarrer xterm en tant que shell, ce qui démarre un autre xterm en tant que celui-ci Shell, puis un autre, et un autre ...

Vous pouvez probablement en trouver un peu plus en exécutant man xterm

26
Wilf

Version courte: l'argument de xterm est le shell à exécuter par xterm; Shell est défini dans environment var. Par conséquent, les appels suivants effectuent une récursivité 10 PRINT "xterm" 20 GOTO 10.

Version longue:

  1. xterm xterm passe xterm à l'appel xterm en tant que shell xterm en définissant la variable $Shell avec xterm (le premier paramètre de xterm est interprété comme un shell à exécuter)
  2. ensuite, xterm exécuté par votre commande xterm xterm exécute le $Shell - dans ce cas, en créant une autre instance de xterm (car $Shell=xterm maintenant).
  3. $Shell=xterm déjà, donc le xterm nouvellement créé exécute xterm
  4. aller à 3

Lectures supplémentaires: man xterm

16
vaxquis