Hỏi điều này sau một cuộc thảo luận kéo dài với đồng nghiệp, tôi thực sự muốn làm rõ ở đây.
Tôi khởi chạy một quá trình nền, bằng cách thêm " &" vào dòng lệnh hoặc bằng cách dừng nó CTRL-Zlại và tiếp tục nó ở chế độ nền với " bg". Sau đó tôi đăng xuất.
Chuyện gì xảy ra
Chúng tôi khá chắc chắn rằng nó đáng lẽ đã bị SIGHUP giết, nhưng điều này đã không xảy ra; khi đăng nhập lại, quá trình này đang diễn ra một cách vui vẻ và pstreecho thấy nó đã được "thông qua" bởi init.
Đây có phải là hành vi dự kiến?
Nhưng sau đó, nếu có, nohupmục đích của lệnh là gì? Dường như quá trình sẽ không bị giết dù thế nào, có hoặc không có nó ...
Chỉnh sửa 1
Một số chi tiết:
- Lệnh được khởi chạy từ phiên SSH, không phải từ bảng điều khiển vật lý.
- Lệnh được đưa ra mà không có nohupvà / hoặc&; sau đó nó đã bị đình chỉCTRL-Zvà tiếp tục trong nền vớibg.
- Phiên ssh không giảm. Có một đăng xuất thực tế ( exitlệnh "").
- Quá trình này là một scphoạt động sao chép tập tin.
- Khi đăng nhập lại, pstreecho thấy quá trình chạy và là con củainit.
Chỉnh sửa 2
Để nêu câu hỏi rõ ràng hơn: sẽ đặt một quá trình trong nền (sử dụng &hoặc bg) làm cho nó bỏ qua SIGHUP, giống như nohuplệnh nào?
Chỉnh sửa 3
Tôi đã thử gửi thủ công SIGHUPđến scp: nó đã thoát, vì vậy nó chắc chắn không bỏ qua tín hiệu.
Sau đó, tôi đã thử khởi chạy lại nó, đặt nó vào nền và đăng xuất: nó đã được "thông qua" initvà tiếp tục chạy, và tôi đã tìm thấy nó ở đó khi đăng nhập lại.
Bây giờ tôi khá bối rối. Có vẻ như không SIGHUPđược gửi ở tất cả upong đăng xuất.
1>/dev/null 2>&1cho bash, vv?