Chạy lệnh
java -jar app.jar &
với nohup java -jar app.jar &
thì khác nhau thế nào?
Lệnh ko có nohup thì output sẽ tiếp tục văng ra trên màn hình terminal phiên đăng nhập hiện tại (pts - pseudo terminal slave). Thế nên sau khi chạy lệnh đấy, bạn làm vài thứ mà vẫn thấy log văng ra lại tưởng ma làm hay lỗi gì :))
Còn lệnh có nohup thì output sẽ đẩy ra file nohup.out ở cùng thư mục (hoặc trong $HOME nếu ko thấy)
Sau khi gõ 1 trong 2 lệnh trên rồi exit (ví dụ bạn SSH vào bằng XShell hoặc putty..., gõ exit hoặc nhấn Close cửa sổ) thì ứng dụng vẫn chạy ngầm
Tuy nhiên nếu "shopt | grep hupon" mà không phải là "huponexit off" thì lệnh không có nohup ở đầu sẽ không duy trì được ứng dụng chạy ngầm sau khi bạn thoát khỏi terminal
Thực tế các bản Linux đều để "huponexit off" nên ta có thể quên nohup mỗi khi muốn chạy ngầm 1 ứng dụng
Muốn chạy ngầm và không thèm xem output văng ra thì thêm
java -jar app.jar > /dev/null 2>&1 &
Cái > dev/null là để mọi thứ in ra stdout vứt vào hư vô. Còn cái 2>&1 tức là log của stderr cũng đẩy ra stdout. Nếu không có thì khi phát sinh log error, nội dung log sẽ vẫn văng ra màn hình
Bonus thêm: 1 ứng dụng chạy ngầm có process id (xem bằng lệnh ps). Input/output... của nó sẽ ở /proc/{your_app_pid}/fd/{1,2} - 1 là stdout, 2 là stderr