Tôi đã đăng một câu trả lời cho một chủ đề cũ hơn của chủ đề tương tự với câu trả lời từ nhiều nguồn khác nhau. Sau đây là một bản sao của câu trả lời thích nghi cho chủ đề này.
Các tác phẩm sau:
$ (gui_app &> /dev/null &)
Đây là câu trả lời của Nathan Fellman cộng với chuyển hướng.
"&> / dev / null" chuyển hướng cả thiết bị xuất chuẩn và thiết bị xuất chuẩn sang thiết bị null. Dấu và cuối cùng làm cho quá trình chạy trong nền. Các dấu ngoặc đơn xung quanh lệnh sẽ khiến "gui_app" của bạn chạy trong một khung con.
Làm điều này sẽ tách quá trình "gui_app" khỏi bàn điều khiển mà bạn thực hiện lệnh này từ đó. Vì vậy, ngay cả khi bạn đóng trình giả lập thiết bị đầu cuối cha mẹ đang chạy, "gui_app" sẽ không đóng. Tôi đã chạy nó sau đó nhìn vào cây quy trình bằng lệnh "pstree" và thấy một ứng dụng bắt đầu theo cách này sẽ trở thành tiến trình con thành "init".
Ví dụ,
$ gui_app &> /dev/null &
sẽ chạy ứng dụng trong nền, nhưng nó sẽ trở thành một tiến trình con của tiến trình giao diện điều khiển và sẽ chấm dứt khi bạn đóng thiết bị đầu cuối. (Mặc dù thoát khỏi thiết bị đầu cuối thông qua bash bằng cách sử dụng lệnh exit hoặc Ctrl-D sẽ cho phép bash dọn sạch bằng cách chuyển quá trình nền cho init.)
"nohup" hoạt động như NawaMan đã đề xuất, nhưng điều đó chuyển hướng đầu ra & lỗi sang một tệp theo mặc định. Như JeffG đã trả lời, lệnh "disown" (nếu có sẵn trong shell) có thể tách quy trình khỏi thiết bị đầu cuối sau khi bạn bắt đầu một quy trình nền:
$ gui_app &
$ disown
(BTW tất cả những điều này áp dụng cho bash. Tôi chắc chắn các shell khác có các phương thức / cú pháp khác để làm điều này.)
Một số tài liệu tham khảo:
Quy trình từ chối (Công cụ điện UNIX)
Nếu đó là một cuộc gọi đơn giản đến một ứng dụng GUI - không có các tùy chọn phức tạp và như vậy - thì có vẻ như sử dụng trình khởi chạy như "gmrun" hoặc dmenu (cảnh báo: âm thanh lớn) cũng là một lựa chọn tốt. Liên kết nó với một sự kết hợp quan trọng. Tôi chưa sử dụng launcher nhưng đã thử hai cái đó.
LƯU Ý: CarlF trong các nhận xét của các luồng khác báo cáo các ứng dụng GUI được khởi động thông qua phương thức "gui_app &" không đóng khi anh ta thoát khỏi thiết bị đầu cuối cha mẹ. Tôi nghĩ rằng chúng tôi đã đóng thiết bị đầu cuối theo những cách khác nhau. Tôi đã đóng cửa sổ trình giả lập thiết bị đầu cuối đang chạy. Tôi nghĩ rằng anh ta có thể đã thoát khỏi trình giả lập thiết bị đầu cuối thông qua trình bao (lệnh exit hoặc Ctrl-D). Tôi đã thử nghiệm điều này và thấy rằng việc thoát qua bash không dừng GUI bắt đầu như quá trình nền của thiết bị đầu cuối như CarlF nói. Có vẻ như bash bỏ các quá trình nền để khởi tạo khi nó có cơ hội để làm sạch. Trong thực tế, đây phải là cơ chế mà quá trình nền bắt đầu trong một lớp con được chuyển sang init.