Fork fork นี้ทำให้ฉันนึกถึงสิ่งที่อาจารย์สอนโปรแกรม AI กล่าวไว้ในหนึ่งในบทเรียนแรกที่ฉันเข้าร่วม "เพื่อให้เข้าใจถึงการเรียกซ้ำครั้งแรกคุณต้องเข้าใจการเรียกซ้ำ"
ที่แกนกลางระเบิดนี้เป็นฟังก์ชั่นวนซ้ำ ในสาระสำคัญคุณสร้างฟังก์ชั่นซึ่งเรียกตัวเองซึ่งเรียกตัวเองซึ่งเรียกตัวเองว่า .... จนกระทั่งทรัพยากรระบบมีการบริโภค ในอินสแตนซ์ที่เฉพาะเจาะจงนี้การเรียกซ้ำจะถูกขยายโดยการใช้ฟังก์ชั่นไพพ์กับตัวมันเองและแบ็คกราวด์มัน
ฉันเคยเห็นคำตอบนี้มาจากStackOverflowและฉันคิดว่าตัวอย่างที่ให้ไว้จะแสดงให้เห็นว่าดีที่สุดเพียงเพราะมันง่ายต่อการดูว่ามันทำอะไรได้อย่างรวดเร็ว (ถูกขโมยจากลิงก์ด้านบน ... )
☃(){ ☃|☃& };☃
กำหนดฟังก์ชั่นข้อผิดพลาด☃() { ... }
ร่างกายซึ่งเรียกตัวเอง (ฟังก์ชันข้อผิดพลาด) ท่อออกไปเอง (ฟังก์ชันข้อผิดพลาด) และพื้นหลังผล☃|☃
จากนั้นหลังจากที่ฟังก์ชั่นที่มีการกำหนดไว้จริงเรียกใช้ฟังก์ชันข้อผิดพลาดที่&
; ☃
ฉันทราบว่าอย่างน้อยที่สุดใน Arch VM ของฉันความต้องการแบ็คกราวน์ของกระบวนการไม่ใช่ข้อกำหนดที่จะต้องมีผลลัพธ์ที่เหมือนกันเพื่อใช้พื้นที่กระบวนการทั้งหมดที่มีอยู่และแสดงโฮสต์ b0rked ที่จริงตอนนี้ฉันบอกว่าบางครั้งดูเหมือนจะยุติกระบวนการวิ่งหนีและหลังจากหน้าจอของ-bash: fork: Resource temporarily unavailable
มันจะหยุดด้วยTerminated
(และjournalctl
แสดงการทุ่มตลาดหลักทุบตี)
ในการตอบคำถามของคุณเกี่ยวกับ csh / tcsh ไม่สามารถใช้งานฟังก์ชั่นของเชลล์เหล่านั้นได้ ดังนั้นสำหรับเชลล์เหล่านั้นคุณต้องเขียนเชลล์สคริปต์ซึ่งเรียกตัวเองซ้ำ ๆ
zsh ดูเหมือนจะประสบชะตากรรมเดียวกัน (ด้วยรหัสเดียวกัน) ไม่ใช่การถ่ายโอนข้อมูลหลักและทำให้ Arch ให้Out of memory: Kill process 216 (zsh) score 0 or sacrifice child.
แต่มันยังคงแยกต่อไป หลังจากผ่านไประยะหนึ่งแล้วKilled process 162 (systemd-logind) ...
(และยังคงมีฟอร์ก zsh)
Arch ดูเหมือนจะไม่มีpacman
รุ่นของ ksh ดังนั้นฉันจึงต้องลองใช้เดเบียนแทน วัตถุ ksh :
เป็นชื่อฟังก์ชั่น แต่ใช้สิ่ง - พูดb()
แทนดูเหมือนว่าจะมีผลที่ต้องการ