Giả sử bạn thiếu cả GNU screen
và tmux
(và X11 và bảng điều khiển ảo) nhưng muốn chuyển đổi giữa vỏ đăng nhập và vỏ tương tác khác.
Trước tiên, bạn sẽ đăng nhập vào bảng điều khiển, sau đó bắt đầu một vỏ mới, tạm thời chặn vỏ đăng nhập. Để lấy lại vỏ đăng nhập để thực hiện một số công việc ở đó, bạn sẽ làm suspend
. Sau đó, bạn sẽfg
có được vỏ tương tác trở lại để tiếp tục với bất cứ điều gì bạn đã làm ở đó.
Trong thực tế, với kiểm soát công việc, shell đăng nhập có thể sinh ra một số shell tương tác làm công việc nền mà bạn có thể chuyển sang fg %1
, fg %2
v.v., nhưng để quay lại shell đăng nhập, bạn sẽ cần sử dụngsuspend
trừ khi bạn muốn thủ công kill -s STOP $$
.
Cũng lưu ý rằng Ctrl+ Ztại dấu nhắc trong trình bao tương tác sẽ không tạm dừng nó.
EDIT: Ban đầu tôi có một phần giả thuyết dài về việc sử dụng suspend
tập lệnh, nhưng vì lệnh yêu cầu kiểm soát công việc và vì các shell không tương tác thường không có kiểm soát công việc, tôi đã xóa phần đó.
Phần bị xóa với suspend
thay thế bởikill -s STOP $$
(điều này thực sự không thuộc về câu trả lời nữa, nhưng dù sao nó cũng có thể thú vị với người khác):
Giả sử bạn có một quy trình nền (tập lệnh) trong tập lệnh và quy trình nền này ở giai đoạn nào đó cần phải dừng lại và chờ quá trình cha mẹ diễn ra để tiếp tục. Điều này có thể để cha mẹ có thời gian trích xuất và di chuyển các tệp vào vị trí hoặc một cái gì đó tương tự.
Tập lệnh con sẽ tạm dừng ( kill -s STOP $$
) và tập lệnh cha sẽ gửi CONT
tín hiệu đến tập lệnh đó khi có thể tiếp tục.
Nó cho bạn cơ hội để thực hiện một loại đồng bộ hóa giữa quy trình cha và quy trình con (mặc dù rất cơ bản vì quy trình vỏ cha mẹ ít nhiều cần phải đoán rằng quy trình con bị đình chỉ, mặc dù điều này có thể được khắc phục bằng cách có con bẫy CONT
và không treo nếu tín hiệu đó được nhận quá sớm).
fork/exec
cuộc gọi hệ thống