ฉันดูเหมือนจะเข้าใจผิดกฎของ 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 ด้วย ฉันกำลังทำอะไรผิดที่นี่?