쉘이 종료될 때 죽지 않는 프로세스를 어떻게 포크합니까?"이중 포크"에 대해 이야기합니다.
이중
fork()
:(emacs &)
중괄호 안의 명령은
(
)
별도의 셸 프로세스에서 실행됩니다.
단순한 emacs &
. 우선 서브셸 환경에서 실행하는 이유는 무엇입니까?
답변1
단순한
emacs &
.
(emacs &)
서브쉘을 실행한 다음 emacs &
그 내부에서 실행됩니다. 즉 stdin
, stdout
, 및 가 stderr
서브쉘에 대신 연결되어 있음을 의미합니다. 이중 포크가 되어 초기 쉘( (emacs &)
실행된 위치)이 죽어도 살아남습니다. 실행만 하면 , 및 가 초기 셸에 연결되어 emacs &
유지됩니다 .stdin
stdout
stderr
emacs
stdin
GUI 버전은 , stdout
및 가 손실된 것을 신경 쓰지 않기 때문에 실제로 이에 대한 나쁜 예입니다 stderr
. 시도한 (ls -R / &); exit
다음 grep하여 여전히 실행 중인지 확인할 수 있습니다. 보다 나은 예를 위한 편집을 환영합니다 ls
.
우선 서브셸 환경에서 실행하는 이유는 무엇입니까?
초기 쉘에서 완전히 분리하려면(위 참조)