2012-01-20 41 views
9

Tôi đã nhìn vào quả bom ngã ba trên Wikipedia, và các ví dụ hàng loạt là:Bom ngã ba hàng loạt?

%0|%0 

HOẶC

:here 
start ''your fork bomb name''.bat 
goto here 

HOẶC

:here 
start %0 
goto here 

Tôi hiểu thứ hai hai, họ bắt đầu một Ví dụ của bản thân và sau đó lặp lại, nhưng tôi không hiểu đầu tiên. Tôi đọc rằng đường dẫn thực thi tệp ở bên phải với đầu ra của tệp ở bên trái. Tại sao có thể không phải là quả bom ngã ba chỉ là:

%0 

tôi sẽ giả định rằng điều này sẽ gọi riêng của mình, nhưng sau đó chấm dứt ngay lập tức, nhưng tại sao sẽ không %0|%0 cũng chấm dứt? Mặc dù trường hợp mới sẽ tiếp tục tạo các phiên bản mới, không phải là lần đầu tiên được thực hiện sau khi bắt đầu lần thứ hai chưa? Điều gì làm cho người đầu tiên tiếp tục?

chỉnh sửa: Vòng lặp có lặp không vì không có trường hợp nào có thể chấm dứt cho đến khi cuộc gọi đệ quy của họ được trả về? Điều này có nghĩa là nó chỉ bao giờ gọi %0 đầu tiên?

Trả lời

7

% 0 sẽ không bao giờ kết thúc, nhưng nó không bao giờ tạo nhiều quá trình bởi vì nó ngay lập tức chuyển quyền kiểm soát cho tập lệnh lô thứ 2 (tự nó xảy ra).

Nhưng một ống Windows tạo ra một quy trình mới cho mỗi bên của đường ống, ngoài quy trình gốc. Quá trình cha mẹ không thể hoàn thành cho đến khi mỗi bên của đường ống chấm dứt. Vì vậy, chương trình chính với một đường ống đơn giản sẽ có 3 quy trình. Bạn có thể thấy cách bom nhanh chóng thoát ra khỏi tầm kiểm soát nếu mỗi bên của đường ống đệ quy gọi hàng loạt cha mẹ!

+0

Phần thứ hai của đường ống được gọi như thế nào nếu cuộc gọi đệ quy đầu tiên không bao giờ trở lại? – mowwwalker

+2

Hai bên được chạy không đồng bộ – dbenham

+1

Tôi được thông báo rằng đường ống dẫn đến nửa thứ hai với sự trở lại của nửa đầu: http://www.csie.ntu.edu.tw/~r92092/ref/win32/win32scripting.html # Win32Scripting-Command-Redirection-And-Pipelines – mowwwalker

Các vấn đề liên quan