프로세스가 닫히면, Kernel 이 해당 프로세스의 모든 자원을 반환 받도록 되어 있습니다.
간혹 Kernel의 버그로 자원을 회수 받이 못하는 경우도 있다고 하는데, 그건 어디까지나 버그이니깐 무시하시고
프로세스가 종료되면 모든 자원이 반환된다고 생각하시면 됩니다.
대표적으로 메모리와 file descriptor 입니다.
다만, 프로세스가 종료가 되도 반환 되지 않도록 설계된 몇몇 메커니즘이 있는데요.
제가 알고 있는 것은 공유메모리와 세마포어입니다.
공유메모리의 경우, 메모리를 생성한 프로세스가 종료되거나 에러로 죽어도 공유메모리를 살아있습니다.
세마포어의 경우, 생성한 프로세스가 죽어도 세마포어는 남아 있고, 또한 count를 증가시킨 프로세스가 그냥 종료하거나 사고로 종료해도 기본적으론 count한 카운트를 감소시키지 않습니다. (옵션을 추가하여 감소시키도록 할 수는 있습니다.)
위에 말고 더 알고 계신분이 있으시다면, 알려주시면 감사하겠습니다.
file descriptor 의 경우도 약간의 특별한 규칙이 있습니다.
프로세스가 fork로 인해 fd 가 복사 됐거나, dup() 로 fd를 복사 했을 경우에는 복사된 모든 fd가 close 되야 fd가 제거됩니다.
예를 들어, 소켓 접속을 한후에 fork 로 프로세스를 복사하게 되면, fork 전의 소켓이 새로생선된 프로세스로 복사가 됩니다.
두개의 프로세스중 한곳에서 그 소켓을 close 를 해도, 다른 프로세스에서는 여전히 그 소켓을 사용할 수 있습니다.
소켓 연결이 여전히 계속 되어 있다는 것이지요.
나머지 다른 프로세스에서도 소켓을 close 을 해야, 그때서야 실제로 해당 소켓을 접속 종료가 됩니다.
프로세스가 닫히면
프로세스가 닫히면 파일도 닫힐겁니다.
감사합니다.
답변 감사 드립니다.
좋은 하루 되세요.
좋은 하루 되세요.
프로세스가 닫히면,
프로세스가 닫히면, Kernel 이 해당 프로세스의 모든 자원을 반환 받도록 되어 있습니다.
간혹 Kernel의 버그로 자원을 회수 받이 못하는 경우도 있다고 하는데, 그건 어디까지나 버그이니깐 무시하시고
프로세스가 종료되면 모든 자원이 반환된다고 생각하시면 됩니다.
대표적으로 메모리와 file descriptor 입니다.
다만, 프로세스가 종료가 되도 반환 되지 않도록 설계된 몇몇 메커니즘이 있는데요.
제가 알고 있는 것은 공유메모리와 세마포어입니다.
공유메모리의 경우, 메모리를 생성한 프로세스가 종료되거나 에러로 죽어도 공유메모리를 살아있습니다.
세마포어의 경우, 생성한 프로세스가 죽어도 세마포어는 남아 있고, 또한 count를 증가시킨 프로세스가 그냥 종료하거나 사고로 종료해도 기본적으론 count한 카운트를 감소시키지 않습니다. (옵션을 추가하여 감소시키도록 할 수는 있습니다.)
위에 말고 더 알고 계신분이 있으시다면, 알려주시면 감사하겠습니다.
file descriptor 의 경우도 약간의 특별한 규칙이 있습니다.
프로세스가 fork로 인해 fd 가 복사 됐거나, dup() 로 fd를 복사 했을 경우에는 복사된 모든 fd가 close 되야 fd가 제거됩니다.
예를 들어, 소켓 접속을 한후에 fork 로 프로세스를 복사하게 되면, fork 전의 소켓이 새로생선된 프로세스로 복사가 됩니다.
두개의 프로세스중 한곳에서 그 소켓을 close 를 해도, 다른 프로세스에서는 여전히 그 소켓을 사용할 수 있습니다.
소켓 연결이 여전히 계속 되어 있다는 것이지요.
나머지 다른 프로세스에서도 소켓을 close 을 해야, 그때서야 실제로 해당 소켓을 접속 종료가 됩니다.
감사합니다.
감사합니다.
좋은 하루 되세요.
좋은 하루 되세요.
댓글 달기