답변:
이것이 X 앱 또는 콘솔 앱으로 실행되고 있는지 언급하지 않습니다.
콘솔 앱인 경우에는 종료해야합니다. 입력 / 출력, 더 기술적으로 (의사) tty를 제거했습니다. 이것이 당신이 의미 한 것은 아닐 것이므로 X 앱에 대해 이야기하고 있다고 가정 해 봅시다.
nohup
왜 그렇지 않은지 잘 모르겠습니다. 쉘이 닫히면 SIGHUP
프로세스 그룹의 모든 프로세스로 전송 됩니다. nohup은 SIGHUP을 무시하도록 명령에 지시합니다.
프로세스 그룹과 프로세스의 연결을 끊는 setsid를 시도 할 수도 있습니다.
alias emacs='setsid emacs'
또는 disown
나중에 추가하십시오&
가장 신뢰할 수있는 방법은 다음과 같습니다.
(setsid emacs &)
( &)
백그라운드로 포크 setsid
하고 제어하는 tty에서 분리 하는 데 사용 됩니다 .
이것을 쉘 함수에 넣을 수 있습니다.
fork() { (setsid "$@" &); }
fork emacs
가능성은 다음과 같습니다.
disown
내장 명령 :
emacs &
disown $!
&
명령 구분 기호 역할 disown
을하며 가장 최근 작업으로 기본 설정되므로 다음과 같이 단축 할 수 있습니다.
emacs & disown
이중 fork()
:
(emacs &)
괄호 안의 명령 (
)
은 별도의 셸 프로세스에서 실행됩니다.
setsid
Rich에서 제안한대로 새 세션 을 작성하여 프로세스의 제어 TTY를 설정 해제하기 때문에 최선의 선택 일 수 있습니다 .
setsid emacs
그러나 그것은 또한 예측할 수 없습니다- fork()
프로세스 그룹의 리더 인 경우 에만 배경이됩니다 ( 예를 들어 스크립트 setsid
에서 사용되는 경우에는 발생하지 않습니다. 이러한 경우 에는 sh
Ctrl- 기음.)
(exec emacs)
작동할까요?
(emacs)
. 서브 쉘에 단일 명령이 제공되면 exec
적어도의 경우에 묵시적입니다 bash
. bash -c 'foo'
vs에 동일하게 적용됩니다 bash -c 'exec foo'
. (그러나 emacs 자체 가 터미널에서 분리 될 수 있습니다. 예를 들어 gvim이이를 수행합니다. 알려진 동작이있는 프로그램으로 테스트하는 것이 좋습니다.)