Làm thế nào để nohup làm việc?


8

Tôi hiểu rằng để chặn tín hiệu quá trình như thế nào SIGHUP, bạn sẽ cần phải làm như vậy từ bên trong quy trình mà tín hiệu được gửi đến. Tuy nhiên, lớp vỏ Unix bashcó thể sinh ra một tiến trình con và chặn HUPtín hiệu cho con từ bên trong cha mẹ, bằng cách sử dụng nohuplệnh. Cái này hoạt động ra sao? Có nohupchặn tín hiệu và sau đó thực hiện quá trình con mà không cần rẽ? Đó là cách duy nhất tôi có thể nghĩ ra.

Câu trả lời:


7

Bạn có thể xem mã nguồn của việc triển khai nohup, ví dụ như coreutilsphiên bản của GNU . Có rất nhiều thiết lập, một số cho mục đích quốc tế hóa, phần còn lại để xử lý các tùy chọn chuyển hướng khác nhau; sau đó thực tế "nohupping" xảy ra:

  signal (SIGHUP, SIG_IGN);

  char **cmd = argv + optind;
  execvp (*cmd, cmd);

Khi bạn phỏng đoán, điều này đặt quá trình lên để bỏ qua tín hiệu HUP, sau đó execlà lệnh được yêu cầu.


-2

Hành động sử dụng nohupchỉ đơn giản là thay đổi PPID của quá trình sinh ra thành 1 (init) để khi thoát khỏi vỏ, nó không còn là quá trình con của vỏ đó và do đó không nhận được HUP.

EDIT: Nên suy nghĩ nhiều hơn trước khi tôi đăng bài đôi khi. Để nó ở đây để nhắc nhở tôi về sự xấu hổ của mình :-(

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.