Đó là tương đương với việc nhấn Ctrl+Ztrong các lệnh khác.
Nó treo shell và đưa lại quyền điều khiển cho shell cha hoặc xử lý nếu có.
Thí dụ:
zsh$ bash
bash-4.4$ cd /
bash-4.4$ suspend
zsh: suspended (signal) bash
zsh$ fg
[1] + continued bash
bash-4.4$ pwd
/
Tính năng này đến từ csh, vỏ của BSD (nơi kiểm soát công việc đến từ đầu những năm 80) .
Trong AT & T ksh, đó là bí danh dựng sẵn cho kill -s STOP $$( có, không có dấu ngoặc kép! )
Trong trường hợp của bạn, bashcó lẽ là cái được bắt đầu trực tiếp bởi trình giả lập thiết bị đầu cuối. Và trình giả lập thiết bị đầu cuối của bạn không mong đợi quá trình bị đình chỉ.
Đó bashlà một người lãnh đạo phiên. Nếu người lãnh đạo phiên bị đình chỉ, nếu chúng tôi xem các thiết bị đầu cuối thời gian cũ, người dùng sẽ không có cách nào để tiếp tục.
bashgiải quyết bằng cách từ chối suspendnếu nó là một vỏ đăng nhập. Nhưng trong trường hợp của bạn, trình giả lập thiết bị đầu cuối của bạn có thể không bắt đầu bashở chế độ đăng nhập, do đó không có biện pháp bảo vệ.
zshvà mkshkhông gặp vấn đề gì vì họ gửi tín hiệu SIGTSTP(cũng được gửi Ctrl+Z) như csh thay vì SIGSTOP(và cho nhóm quy trình của người gọi mkshnhư trong csh và cho nhóm quy trình chính của shell zsh, chứ không phải cho $$quá trình một mình ). SIGTSTPbị bỏ qua khi được giao cho một nhóm quy trình mồ côi và nhóm của nhà lãnh đạo đủ điều kiện. Ý tưởng là SIGTSTP không nên đình chỉ một cái gì đó mà người dùng không thể tiếp tục.
Trong mkshhoặc yash, người ta cũng có thể sử dụng suspendđể có một subshell đình chỉ chính nó:
$ (set -x; sleep 1; suspend; sleep 2)
+ sleep 1
+ suspend
[1] + Stopped(SIGSTOP) (set -x; sleep 1; suspend; sleep 2)
$ fg
[1] (set -x; sleep 1; suspend; sleep 2)
+ sleep 2
Điều đó sẽ không hoạt động với zshviệc gửi SIGTSTP đến nhóm quy trình chính thay vì người gọi. Trong bất kỳ shell nào đã killdựng sẵn, người ta luôn có thể sử dụng kill -s TSTP 0thay thế.