Tôi dường như hiểu sai quy tắc Bash để tạo ra một subshell. Tôi nghĩ rằng dấu ngoặc đơn luôn tạo ra một lớp con, chạy như là quá trình riêng của nó.
Tuy nhiên, điều này dường như không phải là trường hợp. Trong Đoạn mã A (bên dưới), sleeplệnh thứ hai không chạy trong một vỏ riêng (như được xác định bởi pstreetrong một thiết bị đầu cuối khác). Tuy nhiên, trong Code Snippet B, sleeplệnh thứ hai không chạy trong một shell riêng. Sự khác biệt duy nhất giữa các đoạn mã là đoạn mã thứ hai có hai lệnh trong ngoặc đơn.
Ai đó có thể vui lòng giải thích quy tắc khi subshells được tạo ra?
MÃ SNIPPET A:
sleep 5
(
sleep 5
)MÃ SNIPPET B:
sleep 5
(
x=1
sleep 5
)
forkvà tiến trình con được tạo (để thực thi các lệnh bên ngoài) bằng cách gọifork + exec. Nhưng đoạn đầu tiên của bạn cho thấy rằng nófork + execcũng được gọi là subshell. Những gì tôi đang nhận được ở đây?