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-Z
lạ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à pstree
cho 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ó, nohup
mụ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ó
nohup
và / hoặc&
; sau đó nó đã bị đình chỉCTRL-Z
và 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ế (
exit
lệnh ""). - Quá trình này là một
scp
hoạt động sao chép tập tin. - Khi đăng nhập lại,
pstree
cho 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ư nohup
lệ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" init
và 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>&1
cho bash, vv?