Tại sao lệnh triệu xterm xterm đá tạo ra một đệ quy vô hạn?


31

Tôi đang chạy Ubuntu 14.04 (64 bit). Khi tôi lần đầu tiên phát hiện ra lệnh xterm, tôi đã thử lệnh xterm xtermvà nó bắt đầu mở vô hạn các cửa sổ xterm mới.
ctrl + Cdừng nó ngay lập tức và đóng tất cả các cửa sổ.

Nhưng tôi muốn xem nó đi được bao xa và để nó chạy càng lâu càng tốt. Nó đã ăn gần hết RAM và cuối cùng bị đóng (tôi nghĩ là do chính hệ thống).

Vì vậy, chỉ vì tò mò, tại sao / làm thế nào điều này xảy ra?


3
Off-topic: nó đã bị đóng cửa vì có lẽ nó đã sử dụng quá nhiều bộ nhớ và bị giết bởi kẻ giết người OOM (hết bộ nhớ).
Léo Lam

5
Điều này cần được sửa bởi phiên bản 301 : "chỉ đặt SHELLbiến môi trường thành các chương trình được tìm thấy trong /etc/shells(được nhắc bởi bản vá / báo cáo của Al Poole)". (Các câu trả lời giải thích những gì với SHELLbiến môi trường).
Cristian Ciupitu

@CristianCiupitu - +1 - Tôi mới cài đặt phiên bản 308 - và thay vì mở các thiết bị đầu cuối định kỳ, nó sẽ mở một cái trống và cái thứ hai có bash (thứ hai có lẽ là 'vỏ' của xterm đầu tiên.
Wilf

Câu trả lời:


26

Tôi (đoán) điều này là do tham số đầu tiên bạn đưa ra xtermshell để sử dụng - xterm bash(hoặc xterm /bin/bash), xterm pythonv.v.

Vì vậy, nó chạy xterm, cố gắng bắt đầu xtermnhư một cái vỏ, bắt đầu cái khác xtermnhư cái vỏ đó, cái khác, và cái khác ...

Bạn có thể có thể tìm thấy thêm một chút về điều này bằng cách chạy man xterm


24
Vâng. Đầu tiên xtermbộ $SHELLđến xtermvà bắt đầu khác xtermnhư vỏ của nó. Cái kia xtermsử dụng lệnh trong $SHELLvỏ của nó, do đó bắt đầu một lệnh khác xterm, ...
Florian Diesch

6
Phần này của câu trả lời không rõ ràng: "cái này bắt đầu cái khác xtermnhư cái vỏ". Tại sao điều đó xảy ra? Cảm ơn @FlorianDiesch đã giải thích phần đó.
John Kugelman hỗ trợ Monica

@JohnKugelman - người đầu tiên xtermbắt đầu thứ hai xtermnhư vỏ của nó, thứ hai xtermbắt đầu thứ ba xtermnhư vỏ của nó, bắt đầu thứ ba thứ tư như vỏ của nó ... vv
Wilf

3
Tôi hiểu lý do tại sao cái đầu tiên xtermbắt đầu cái thứ hai xterm: đó là vì bạn đã gõ xterm xterm. Nhưng tại sao thứ hai xtermbắt đầu thứ ba xterm? Bạn đã không gõ xterm xterm xterm, vì vậy không rõ tại sao thứ ba xtermbắt đầu. Nhận xét của Florian giải thích tại sao.
John Kugelman hỗ trợ Monica

1
Vì vậy, chỉ cần tò mò nó cũng có thể với gnome-terminal?
TuKsn

16

Phiên bản ngắn: đối số của xterm là shell để thực thi bởi xterm; shell được đặt trong môi trường var, vì vậy các cuộc gọi tiếp theo thực hiện 10 PRINT "xterm" 20 GOTO 10đệ quy.

Phiên bản dài:

  1. xterm xtermchuyển xtermđến lệnh gọi xterm dưới dạng shell của xterm bằng cách đặt $SHELLbiến thành xterm(tham số thứ nhất của xterm được hiểu là shell để thực thi)
  2. sau đó, xterm được thực thi bởi xterm xtermlệnh của bạn thực thi lệnh $SHELL- trong trường hợp này, tạo một thể hiện xterm khác (vì $SHELL=xtermbây giờ)
  3. $SHELL=xterm đã có, vì vậy xterm mới được tạo thực thi xterm
  4. goto 3

Đọc thêm: man xterm

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.