为什么命令“xterm xterm”会产生无限递归?

为什么命令“xterm xterm”会产生无限递归?

我正在运行 Ubuntu 14.04 (64 位)。当我第一次发现该命令时xterm,我尝试了该命令xterm xterm,它开始无限地打开新的 xterm 窗口。
ctrl + C立即停止它并关闭所有窗口。

但我想看看它能运行多久,让它尽可能长时间地运行。它几乎消耗了所有内存,最终被关闭了(我认为是系统本身关闭的)。

所以只是出于好奇,为什么/怎么会发生这种情况?

答案1

我(猜测)这是因为你给出的第一个参数xterm使用- xterm bash(或xterm /bin/bashxterm python

因此它运行xterm,尝试xterm以一个 shell 的形式启动,然后xterm以该 shell 的形式启动另一个,然后再启动另一个,再启动另一个......

您可以通过运行来了解更多信息man xterm

答案2

简短版本:xterm 的参数是 xterm 要执行的 shell;shell 在环境变量中设置,因此进一步的调用会进行递归10 PRINT "xterm" 20 GOTO 10

长版本:

  1. xterm xterm通过将变量设置为(xterm 的第一个参数被解释为要执行的 shell),传递xterm给 xterm 调用作为 xterm 的 shell$SHELLxterm
  2. 然后,由你的命令执行的 xtermxterm xterm将执行$SHELL- 在这种情况下,创建另一个 xterm 实例(因为$SHELL=xterm现在)
  3. $SHELL=xterm已经,因此新创建的 xterm 执行xterm
  4. 转到 3

进一步阅读:man xterm

相关内容