ฉันดูเหมือนจะเข้าใจผิดกฎของ Bash ในการสร้าง subshell ฉันคิดว่าวงเล็บจะสร้าง subshell เสมอซึ่งจะทำงานเหมือนกระบวนการของตัวเอง
อย่างไรก็ตามนี่ไม่ใช่กรณี ใน Code Snippet A (ด้านล่าง) sleep
คำสั่งที่สองไม่ได้ทำงานในเชลล์แยกต่างหาก (ตามที่กำหนดโดยpstree
เทอร์มินัลอื่น) อย่างไรก็ตามใน Code Snippet B sleep
คำสั่งที่สองจะทำงานในเชลล์แยกต่างหาก ความแตกต่างเพียงอย่างเดียวระหว่างตัวอย่างก็คือตัวอย่างที่สองมีสองคำสั่งภายในวงเล็บ
มีใครบ้างที่โปรดอธิบายกฎสำหรับตอนที่สร้าง subshells
รหัส SNIPET A:
sleep 5
(
sleep 5
)
รหัส SNIPET B:
sleep 5
(
x=1
sleep 5
)
fork
และกระบวนการเด็กจะถูกสร้างขึ้น (เพื่อรันคำสั่งภายนอก)fork + exec
โดยการเรียก แต่ย่อหน้าแรกของคุณแสดงให้เห็นว่าfork + exec
ถูกเรียกสำหรับ subshell ด้วย ฉันกำลังทำอะไรผิดที่นี่?