Câu trả lời:
Nohup làm cho một chương trình bỏ qua tín hiệu HUP, cho phép nó chạy sau khi thiết bị đầu cuối hiện tại bị đóng / người dùng đăng xuất. Nohup không gửi chương trình đến nền.
& ở cuối lệnh có liên quan đến kiểm soát công việc shell, cho phép người dùng tiếp tục làm việc trong phiên shell hiện tại.
Thông thường nohup và & được kết hợp để khởi chạy chương trình chạy sau khi đăng xuất của người dùng và cho phép tiếp tục làm việc tại phiên shell hiện tại.
Thông thường tôi sử dụng &
khi tôi muốn chạy trong nền một lệnh sẽ không mất nhiều thời gian để chạy hoặc một lệnh mà tôi sẽ không thực sự quan tâm nếu chương trình bị chấm dứt nếu tôi bất ngờ đăng xuất khỏi phiên.
xcalc &
rdesktop 1.2.3.4 &
./this_only_takes_a_few_seconds_but_i_want_my_shell_back.py &
Khi làm việc qua VPN hoặc kết nối từ xa tinh ranh, tôi có xu hướng sử dụng nohup
để chạy bất cứ thứ gì sẽ mất một lúc để chạy. Ví dụ, khi chạy nhập dữ liệu lớn trên máy chủ từ xa, bạn có thể muốn sử dụng nohup
để đảm bảo rằng việc ngắt kết nối sẽ không khiến bạn bắt đầu lại khi kết nối lại.
nohup ./do_data_load.py mydatafile.txt &
Nó cũng được sử dụng khi nhà phát triển không thực hiện đúng dịch vụ, do đó bạn phải sử dụng nohup
để đảm bảo dịch vụ không bị giết khi bạn đăng xuất.
nohup sillyd &
Nếu bạn quên sử dụng nohup
khi chạy một cái gì đó như hai ví dụ trước, bạn có thể sử dụng bash hoặc zsh dựng sẵn disown
để có hiệu lực tương tự.
$ sillyd &
[1] 12345 # Whoops!
$ disown %1
Rất hiếm khi sử dụng nohup
mà không có &
, vì bạn không thể thực sự gắn kết lại với phiên nohup'd nếu bạn đã đăng xuất. Điều này khá nhiều loại bỏ tính hữu ích của nó cho các lệnh tương tác. Trong trường hợp bạn có một lệnh tương tác mà bạn muốn duy trì qua các phiên hoặc tránh ngắt kết nối phức tạp, bạn có thể sử dụng screen
. Hỏa lực của một screen
phiên vũ trang đầy đủ và hoạt động nằm ngoài phạm vi của bài này, vì vậy bạn nên kiểm tra nó chi tiết hơn .
byobu
thêm một số tính năng hay cho màn hình. Nó có sẵn trong hầu hết các repos apt và trong các repos EPEL cho Red Hat.
nohup: đăng xuất người dùng hiện tại, quá trình sẽ không dừng lại
&: với biểu tượng này, sẽ không có đầu ra trong thiết bị đầu cuối hiện tại, quá trình chạy nền