2011-08-29 2 views
3
& # disown the functions 

우리 모두 알고 있듯이 &은 작업을 배경으로두고 가장 중요한 것은 작업을 중지합니다.bash에서 어떻게 구현되고 구현 되었습니까?

하지만 어떻게 이루어 집니까? (쉘을 일시 중단하는)을 &없이

+2

모든 시스템에서 프로세스를 중단하지 않습니다. 리눅스에서는 FreeBSD가 그렇지 않습니다. 'disown' 함수를 보라. – wormsparty

+0

아니요. 그러나'disown' 기능이 있는지보십시오. – wormsparty

답변

5

, 쉘 포크 자체가 작업을 시작하는 자식 프로세스에 execve를 호출하고, 아이 wait 또는 waitpid를 통해 대기 종료하기보다 다른 아무것도 없습니다.

백그라운드 작업을 시작할 때 쉘이 다시 포크하고 자식 프로세스에서 작업을 시작하기 위해 execve을 호출하지만 종료를 기다리지 않고 작업 시작 직후에 컨트롤을 반환합니다.

+0

Bash는 항상 포크가되지는 않습니다 : 때때로 execve는 directrly라고 불리며 때로는 명령이 실행되는 방법과 방법에 따라 내부적으로 실행되기도합니다. bash가 사용하는 execact 함수를 지정하는 것은 이상합니다. 다른 모든 것들은 그렇게 부정확합니다. 난 당신이 게시물을 업그레이 드하고 자식 프로세스의 표준 제어 및 stdin/stdout에 대해 뭔가를 추가하면 좋을 것이라고 생각하지만 이것은 모두 imho입니다. – XzKto

+0

쉘이 외부 프로그램을 시작하는 일반적인 방법에 대해 말하고 있습니다. 물론 내장 명령을 실행하기 위해서 코드는 동일한 실행 파일에 있기 때문에 쉘은 fork와 exec를 수행 할 필요가 없습니다. –

관련 문제