todo
how
상속받았으며, 부모프로세스가 열고 잇는 파일들을 자식 프로세스에서 모두 닫는다
0, 1,2 번 파일 서술자 포함
stdin, stdout, stderr 포함
로그파일이나 콘솔, 또는 /dev/null 을 stdin, stdout, stderr 로 설정한다.
golang에서는 fork systemcall을 직접 지원하지 않음
forkExec로 현재 프로세스를 새 프로세스로 대체하는 api 존재
Go가 고전 Unix의 fork를 제공하지 않는다는 사실을 기억하십시오. 보통 고루틴을 이용하여 프로세스를 생성하거나 exec하여 fork의 대부분의 use case를 다루기 때문에 웬만해선 문제가 되지 않을 것입니다.
syscall.Exec()
syscall.Exec() 함수는 내부적으로 exec family 시스템 콜인 execve(2) 를 실행한다. exec family 시스템 콜은 부모 프로세스에서 자식 프로세스를 fork하는 것이 아닌, 현재 프로세스의 메모리를 새로운 프로세스로 덮어 씌워버린다. 따라서 기존 프로세스의 PID를 똑같이 사용하게 되며, 부모-자식 프로세스라는 개념 자체가 존재하지 않는다.
약간 이해함
entry 프로세스가 daemon 프로세스를 만들고 return으로 죽음
entry(die) -> daemon(live)
daemon 프로세스가 다시 forkExec함
entry(die) -> daemon(live) -> child(live)
daemon 프로세스를 parent로 보고
signal 처리를 해줘야한다
부모가 아무이유없이 죽으면 -> child도 죽어야함
부모가 정상이어도 부모가 죽으라하면 child는 죽어야함