다양한 출처의 답변으로 비슷한 주제의 오래된 스레드 에 대한 답변 을 게시 했습니다 . 다음은이 글에 적합한 답변의 사본입니다.
다음 작품 :
$ (gui_app &> /dev/null &)
이것은 Nathan Fellman의 답변과 방향 전환입니다.
"&> / dev / null"은 stdout과 stderr을 모두 널 장치로 리디렉션합니다. 마지막 앰퍼샌드는 프로세스를 백그라운드에서 실행합니다. 명령을 괄호로 묶으면 "gui_app"가 서브 쉘에서 실행됩니다.
이렇게하면이 명령을 실행하는 콘솔에서 "gui_app"프로세스가 분리됩니다. 따라서 부모 터미널 에뮬레이터가 실행중인 창을 닫아도 "gui_app"는 닫히지 않습니다. 이것을 실행 한 다음 "pstree"명령을 사용하여 프로세스 트리를보고 이런 방식으로 시작된 응용 프로그램이 "init"에 대한 자식 프로세스가된다는 것을 알았습니다.
예를 들어
$ gui_app &> /dev/null &
애플리케이션은 백그라운드에서 실행되지만 콘솔 프로세스의 하위 프로세스가되고 터미널을 닫으면 종료됩니다. (종료 명령 또는 Ctrl-D를 사용하여 bash를 통해 터미널을 종료해도 백그라운드 프로세스를 초기화하여 bash를 정리할 수 있습니다.)
"nohup"은 NawaMan이 제안한대로 작동하지만 기본적으로 출력 및 오류를 파일로 리디렉션합니다. JeffG가 답변했듯이 백그라운드 프로세스를 시작한 후 "disown"명령 (쉘에서 사용 가능한 경우)이 터미널에서 프로세스를 분리 할 수 있습니다.
$ gui_app &
$ disown
(이 모든 것이 bash에 적용됩니다. 다른 쉘에는이를 수행하는 다른 방법 / 구문이 있다고 확신합니다.)
일부 참조 :
프로세스 폐기 (UNIX Power Tools)
복잡한 옵션이없는 GUI 응용 프로그램을 간단하게 호출하는 경우 "gmrun"또는 dmenu (경고 : 큰 소리의 오디오) 와 같은 실행기를 사용하는 것도 좋은 옵션입니다. 키 조합에 바인딩하십시오. 아직 런처를 사용하지 않지만 두 가지를 시도했습니다.
참고 : CarlF 는 다른 스레드 보고서 의 주석에서 "gui_app &"메소드를 통해 시작된 GUI 앱이 상위 터미널을 종료 할 때 닫히지 않습니다. 우리는 다른 방식으로 터미널을 닫고 있다고 생각합니다. 터미널 에뮬레이터가 실행중인 창을 닫고있었습니다. 쉘 (exit 명령 또는 Ctrl-D)을 통해 터미널 에뮬레이터를 종료 한 것 같습니다. 나는 이것을 테스트하고 bash를 통해 나가는 것이 CarlF가 말한 것처럼 터미널의 백그라운드 프로세스로 시작된 GUI를 멈추지 않는다는 것을 알았습니다. bash는 백그라운드 프로세스를 정리하여 정리할 기회가 주어지면 초기화하는 것으로 보입니다. 실제로 이것은 서브 쉘에서 시작된 백그라운드 프로세스가 초기화되도록하는 메커니즘이어야합니다.