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), sleep
lệnh thứ hai không chạy trong một vỏ riêng (như được xác định bởi pstree
trong một thiết bị đầu cuối khác). Tuy nhiên, trong Code Snippet B, sleep
lệ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
)
fork
và 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 + exec
cũng được gọi là subshell. Những gì tôi đang nhận được ở đây?