Khi shell thoát ra, nó có thể gửi tín hiệu HUP đến các công việc nền và điều này có thể khiến chúng thoát ra. Tín hiệu SIGHUP chỉ được gửi nếu chính vỏ nhận được SIGHUP, tức là chỉ khi thiết bị đầu cuối biến mất (ví dụ vì quá trình giả lập thiết bị đầu cuối bị chết) chứ không phải nếu bạn thoát khỏi vỏ bình thường (với exit
nội dung dựng sẵn hoặc bằng cách gõ Ctrl+ D). Xem trong trường hợp nào SIGHUP không được gửi đến một công việc khi bạn đăng xuất? và Có biến thể UNIX nào mà quá trình con chết với cha mẹ của nó không? để biết thêm chi tiết. Trong bash, bạn có thể đặt huponexit
tùy chọn cũng gửi SIGHUP tới các công việc nền trên lối thoát bình thường. Trong ksh, bash và zsh, gọidisown
trên một công việc sẽ loại bỏ nó khỏi danh sách các công việc để gửi SIGHUP tới. Một quá trình nhận SIGHUP có thể bỏ qua hoặc bắt tín hiệu, và sau đó nó sẽ không chết. Sử dụng nohup
khi bạn chạy một chương trình làm cho nó miễn nhiễm với SIGHUP.
Nếu quá trình không bị giết do SIGHUP có thể xảy ra thì nó vẫn bị bỏ lại phía sau. Không còn gì để liên hệ nó với số công việc trong vỏ.
Quá trình có thể vẫn chết nếu nó cố truy cập vào thiết bị đầu cuối nhưng thiết bị đầu cuối không còn tồn tại. Điều đó phụ thuộc vào cách chương trình phản ứng với một thiết bị đầu cuối không tồn tại.
Nếu công việc chứa nhiều quy trình (ví dụ: một đường ống), thì tất cả các quy trình này nằm trong một nhóm quy trình . Các nhóm quy trình được phát minh chính xác để nắm bắt khái niệm về một công việc shell được tạo thành từ nhiều quy trình liên quan. Bạn có thể thấy các quy trình được nhóm theo nhóm quy trình bằng cách hiển thị ID nhóm quy trình của họ (PGID - thông thường là ID quy trình của quy trình đầu tiên trong nhóm), ví dụ như với ps l
Linux hoặc một cái gì đó có thể di chuyển được ps -o pid,pgid,tty,etime,comm
.
Bạn có thể giết tất cả các quy trình trong một nhóm bằng cách chuyển một đối số phủ định tới kill
. Ví dụ: nếu bạn đã xác định rằng PGID cho đường ống bạn muốn giết là 1234, thì bạn có thể giết nó bằng
kill -TERM -1234