fork()는 부모 프로세스 전체를 복사해 자식 프로세스를 만들게 된다. 전체를 복사했다고 해서 메인 함수부터 실행하지는 않는다. 새로 생겨난 자식 프로세스는 fork() 함수를 호출한 이후부터 실행이 된다. fork()의 return value가 0인 부분(자식 프로세스 검사)부터 실행된다고 생각하면 된다. 그리고 자식 프로세스 실행의 마지막은 return value가 0으로 감싼 조건문까지다 https://github.com/surinoel/Linux-SP/blob/master/fork_start_end.c
1. 종료처리 중 멈춰있는 프로세스 2. 자식 프로세스가 종료하였지만 부모 프로세스가 해당 프로세스에 대해 종료를 처리하지 않아 커널 프로세스 테이블에 남아있는 상태의 프로세스 3. 좀비 프로세스가 생성되면, 커널 프로세스 테이블 공유함으로써 시스템 리소스 장악 (pid 부족 현상이 생길 수 있다) 4. 좀비 프로세스를 만들지 않으려면, 부모 프로세스가 자식 프로세스에 대해 종료처리를 해야 한다 (wait, signal 등) COPYRIGHT 인프런, 리눅스 시스템 프로그래밍
inotify는 파일이나 디렉토리에서 발생하는 이벤트를 감시하는 fd다 하나의 fd이기 때문에 read API를 호출해서 blocking 상태로 대기하고 있다
POSIX는 유닉스 운영체제 기반의 표준 운영체제 인터페이스다. 서로 다른 UNIX OS의 공통 API를 정리하여 이식성이 높은 유닉스 응용 프로그램을 개발하기 위한 목적으로 IEEE가 책정한 인터페이스 규격이다. POSIX의 내용은 커널로서의 C 인터페이스 시스템 콜, 프로세스 환경, 파일 및 디렉토리, 시스템 데이터 베이스, tar 압축 포맷 등 다양한 분야를 이루고 있다 표준화에 관한 필요성은 프로그램 호환에 있다. 즉 다른 컴퓨터 시스템이라도 실행이 되는 프로그램이 동작하는 것이다. 유닉스는 중립적인 성질이 강했기에 표준 운영체제 인터페이스로 선정되었다. 하지만 다양한 유닉스 버전의 공통분모가 필요함에 따라 POSIX가 탄생되었다
파일이나 디렉토리에서 발생하는 이벤트를 모니터링하는 inotify inotify object는 하나의 fd로 간주된다 재귀적으로 모니터링 되지 않는다. 만약 모든 하위 디렉토리를 모니터링 하기 위해선 각 디렉토리에 대해 모니터링 하도록 해야한다 구성은 하나의 inotify object를 생성해서 여러 watch를 등록할 수 있다 다양한 mask가 존재해 원하는 모니터링 이벤트를 설정할 수 있다
리눅스에서 프로그램이 메모리에서 프로세스로 동작할 때, 기본적으로 할당되는 3개의 fd가 있다 이들에게 각각 0, 1, 2 라는 정수가 할당되며, POSIX 표준에서는 STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO로 참조된다. 이 매크로는 헤더 파일에서 찾아볼 수 있다. [출처] https://dev-ahn.tistory.com/96