Nohup vs &
2024-10-21 13:51:06
tin tức
tiyusaishi
Tiêu đề: Nohup và &: Hai tạo tác của các lệnh đang chạy trong nền
I. Giới thiệu
Trong các hệ điều hành máy tính, chúng ta thường cần chạy một số tác vụ dài hạn nhất định trong nền, chẳng hạn như các tập lệnh, chương trình chạy dài, v.v. Để đạt được điều này, có hai cách chính để đạt được điều này trong Linux và Unix: sử dụng lệnh nohup và sử dụng biểu tượng &. Bài viết này sẽ giới thiệu chi tiết cả hai phương pháp và so sánh ưu và nhược điểm của chúng.
2. Lệnh nohup là gì?
nohup là một lệnh trong các hệ thống Linux và Unix, và tên đầy đủ của nó là "nohangup", có nghĩa là không gác máy. Khi chúng tôi bắt đầu một chương trình hoặc tập lệnh, thông thường quá trình được liên kết với thiết bị đầu cuối. Khi thiết bị đầu cuối được đóng, tất cả các quy trình sẽ bị chấm dứt. Tuy nhiên, bằng cách sử dụng lệnh nohup, chương trình có thể tiếp tục chạy sau khi thiết bị đầu cuối đóng, tức là nó không treo quá trình. Điều này là do nó tạo ra một phiên mới để chạy quy trình, ngăn quá trình bị chấm dứt do tắt thiết bị đầu cuối. Cách phổ biến nhất để sử dụng nó là "nohupcommand>outputfile2>&1&". Điều này cho phép đầu ra của quá trình được chuyển hướng đến tệp được chỉ định, trong khi đầu ra lỗi được chuyển hướng đến đầu ra tiêu chuẩn. Điều này cho phép người dùng xem đầu ra của quy trình ngay cả khi thiết bị đầu cuối bị đóng.
3. Ký hiệu & là gì?
Trong Unix và Linux, biểu tượng "&" được sử dụng để đặt một lệnh đang chạy trong nền. Khi bạn nhập lệnh vào dòng lệnh, nhấn Enter và lệnh sẽ chạy ở nền trước và chiếm toàn bộ cửa sổ đầu cuối. Nếu bạn muốn chạy nhiều tác vụ cùng một lúc hoặc không muốn làm gián đoạn tác vụ vì thiết bị đầu cuối đã đóng, bạn có thể sử dụng biểu tượng "&" để đặt tác vụ đang chạy trong nền. Bằng cách này, ngay cả khi bạn đóng cửa sổ terminal, tác vụ sẽ tiếp tục thực hiện trong nền. Cần lưu ý rằng các tác vụ chạy với "&" không ghi thông tin đầu ra vào tệp mà xuất trực tiếp trong bảng điều khiển. Do đó, nếu bạn đóng cửa sổ terminal hoặc thoát khỏi phiên, bạn sẽ không thể lấy thông tin đầu ra của tác vụ nữa.
Thứ tư, so sánh và lựa chọn cả hai
1. So sánh tính năng: Cả nohup và "&" đều có thể hoàn thành mục đích chạy các tác vụ trong nền, nhưng chúng hoạt động khác nhau. Nohup chạy quy trình bằng cách tạo một phiên mới để quá trình có thể tiếp tục chạy ngay cả sau khi thiết bị đầu cuối được đóng; Dấu "&" chỉ đơn giản là đặt tác vụ ở chế độ nền và sẽ bị chấm dứt nếu cửa sổ terminal bị đóng hoặc phiên bị thoát. Vì vậy, nếu bạn cần một tác vụ dài hạn hoặc cần đảm bảo rằng tác vụ không bị gián đoạn do tắt thiết bị đầu cuối, thì nohup là lựa chọn tốt hơn.
2. Tình huống sử dụng: Đối với các tác vụ nền chỉ cần chạy trong một thời gian ngắn hoặc các tác vụ không có yêu cầu đặc biệt về thông tin đầu ra, "&" là một lựa chọn đơn giản và nhanh chóng. Chỉ cần thêm biểu tượng "&" sau lệnh. Đối với các tác vụ cần chạy trong một thời gian dài hoặc nếu bạn cần đảm bảo tính toàn vẹn của đầu ra tác vụ, thì sử dụng lệnh nohup và chuyển hướng đầu ra đến tệp là lựa chọn tốt hơn. Bằng cách này, ngay cả khi bạn đóng cửa sổ terminal hoặc rời khỏi phiên, bạn có thể xem tệp để xem đầu ra của tác vụ.
3. Ưu điểm và nhược điểm: Ưu điểm của nohup là nó có thể đảm bảo rằng tác vụ không bị gián đoạn do thiết bị đầu cuối bị đóng và thông tin đầu ra có thể được lưu vào tệp để xem sau. Tuy nhiên, hoạt động tương đối phức tạp và đòi hỏi các lệnh bổ sung để thực hiện chuyển hướng đầu ra. Ưu điểm của "&" là đơn giản và dễ sử dụng, bạn chỉ cần thêm biểu tượng "&" sau lệnh. Tuy nhiên, nhược điểm là nếu bạn đóng cửa sổ terminal hoặc thoát khỏi phiên, tác vụ sẽ bị chấm dứt và thông tin đầu ra có thể không được lưu.
5. Tóm tắt
Nhìn chung, cả nohup và "&" đều là các công cụ thực hiện các tác vụ chạy trong nền, nhưng chúng khác nhau về chức năng và trường hợp sử dụng. Khi chọn phương pháp nào để sử dụng, bạn cần quyết định dựa trên nhu cầu và kịch bản cụ thể của mình. Đối với các tác vụ cần chạy trong thời gian dài hoặc để đảm bảo tính toàn vẹn của đầu ra tác vụ, chúng tôi khuyên bạn nên sử dụng lệnh nohup. Và đối với các tác vụ nền đơn giản, chạy ngắn, "&" là một lựa chọn nhanh chóng và dễ dàng.