tại sao chạy lệnh Linux shell với & amp;?
Để lấy lại lời nhắc của bạn ngay lập tức và chạy quy trình trong nền.
Chức năng của chúng là gì?
không cho phép quá trình nền tiếp tục chạy ngay cả sau khi người dùng đăng xuất (hoặc thoát khỏi vỏ khởi tạo).
& gt; & amp; chuyển hướng cả đầu ra tiêu chuẩn và lỗi tiêu chuẩn vào tệp nhật ký.
& amp; chạy toàn bộ trong nền, cung cấp cho bạn nhắc lại ngay lập tức.
Giải trình:
Mỗi quy trình Linux sẽ mở ba kênh I / O, một "stdin" đầu vào, "đầu ra tiêu chuẩn" và một đầu ra lỗi tiêu chuẩn "stderr". Chúng có thể được sử dụng cho nhị phân nhưng là văn bản truyền thống. Khi hầu hết các chương trình thấy stdin đóng, chúng sẽ thoát (điều này có thể được lập trình viên thay đổi).
Khi vỏ cha mẹ thoát ra, stdin được đóng lại trên con cái và (thường là thường) chúng cũng thoát ra. Ngoài ra, trẻ em nhận được tín hiệu phần mềm, SIGHUP, cho biết người dùng đã "gác máy" (trước đây là modem) và mặc định ở đây cũng là để thoát. (Lưu ý, một lập trình viên có thể thay đổi tất cả những điều này khi viết chương trình).
Vì vậy, những gì nohup làm là cho trẻ xử lý một môi trường I / O riêng biệt, buộc các phần bên trong vào một thứ không gắn với vỏ cha mẹ và che chắn cho đứa trẻ khỏi tín hiệu SIGHUP. Khi người dùng ngắt kết nối, bạn sẽ thấy quy trình nền nohup thuộc sở hữu của init (quy trình 1), chứ không phải trình bao của người dùng.
Tuy nhiên, nohup không thể thực hiện công việc hoàn toàn nếu quy trình được chạy ở nền trước, vì vậy & amp; được sử dụng để chạy chương trình trong nền, nơi nó có thể vui vẻ chạy với hoặc không có người dùng đăng nhập.