Hãy để chúng tôi xem xét bạn đã mở một gedit
trình soạn thảo văn bản từ một thiết bị đầu cuối và làm việc trên nó. Nếu bạn đóng thiết bị đầu cuối trước khi đóng gedit
, gedit cũng sẽ bị đóng ngay khi đóng thiết bị đầu cuối. Chuyện gì đang xảy ra ở đây vậy? Việc gedit
chạy như một quá trình con dưới thiết bị đầu cuối. Khi bạn đóng thiết bị đầu cuối, tín hiệu gác máy ( SIGHUP
) được gửi đến quy trình giết chết tiến trình con.
Mặt khác, nếu bạn muốn con bạn xử lý (ở đây gedit
) tiếp tục chạy ngay cả sau khi đóng thiết bị đầu cuối cha mẹ, bạn sẽ muốn quá trình của bạn miễn nhiễm với tín hiệu gác máy. Vì vậy, việc đóng thiết bị đầu cuối không đóng quá trình con. nohup
thực hiện chính xác công việc này.
nohup
không ngắt kết nối một lệnh từ thiết bị đầu cuối , nó làm cho tập lệnh của bạn bỏ qua SIGHUP và chuyển hướng stdout / stderr sang một tệp nohup.out, để lệnh có thể tiếp tục chạy trong nền sau khi bạn đăng xuất. Nếu bạn đóng shell / terminal hoặc đăng xuất, lệnh của bạn không còn là con của shell đó nữa. Nó thuộc về quá trình init. Nếu bạn tìm kiếm trong pstree
bạn sẽ thấy nó hiện thuộc sở hữu của quy trình 1 (init). Điều đó không thể được đưa trở lại nền trước vì tiền cảnh không còn tồn tại.
disown
là một thay thế tốt hơn đểnohup
. Bối cảnh một lệnh vớicommand &
hoặcCtrl-Z
, sau đó sử dụngdisown
để tách nó ra khỏi vỏ.