Nói chung, khi một quá trình trở thành trẻ mồ côi (nghĩa là cha mẹ của nó chết), nó được thông qua bởi init.
Tình huống đặc biệt mà bạn mô tả có thể áp dụng cho một quy trình tương tác khi thiết bị đầu cuối kiểm soát của nó đóng (từ Wikipedia ):
Tín hiệu SIGHUP được gửi đến một quá trình khi thiết bị đầu cuối điều khiển của nó bị đóng. Ban đầu nó được thiết kế để thông báo cho quá trình giảm dòng nối tiếp. Trong các hệ thống hiện đại, tín hiệu này thường có nghĩa là điều khiển thiết bị đầu cuối giả hoặc ảo đã bị đóng.
Để ngăn chặn điều này, các tiến trình con nên chặn SIGHUP, vì vậy trong hầu hết các trường hợp, bạn cần sự hợp tác từ tiến trình cha.
Nếu quá trình cha mẹ là một vỏ ( bash
, csh
và những thứ tương tự) và bạn muốn lệnh bạn chạy không chấm dứt khi bash kết thúc, bạn có thể thêm tiền tố bất kỳ lệnh với nohup
(từ info coreutils "nohup invocation"
):
'nohup' chạy LỆNH đã cho với các tín hiệu gác máy bị bỏ qua, để lệnh có thể tiếp tục chạy trong nền sau khi bạn đăng xuất.
Trong ví dụ này:
$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;
find
sẽ không bị giết khi lớp vỏ kết thúc và đóng thiết bị đầu cuối điều khiển /dev/ttys000
.
Nếu tập lệnh shell nên chặn SIGHUP, hãy sử dụng nội dung trap
, như được giải thích ở đây cho bash
.