두명이서 순수하게 100시간정도 썼다. 소요기간 약 4주 여기 내용가지고는 부족하니 직접 더 필요한 부분은 구글에 man 으로 검색해서 직접 읽어볼 것
main의 경우 인자를 두개를 형으로 할 수 있는 줄알았는데 환경변수를 추가로 받아오는 방법이 있었다. int main(argc argv envp)를 통해서 를 받아 올 수 있다.
쉘은 어떤 파일로부터 읽고, 어떤 파일로 출력을 할 수 있게하는 리다이렉션을 지원한다. 이걸 어떻게 처리하냐면 stdin, stdout의 fd 0, 1을 직접 파일에다가 연결하는 식으로 한다. dup2로 구현할 수 있다.
일반적으로 프로세스를 실행하기 위해서는 기본적으로
fork 없이 execve를 하면 현재 프로세스에서 그대로 외부 프로그램을 실행하기에 다시 되돌아올 수 없다. fork를 할때 파일 스트림은 유지가 부모로부터 상속받는다. 자세한것은
재미있는 점은 OS에서도 같은 방식으로 프로세스를 새로 실행시킨다.
우리가 사용하던 많은 명령어들은 명령어 그 자체가 하나의 실행 프로그램 이었다.
ls -al
은 알고보면 ./a.out arg1
과 같다.
main에서 받아온 환경변수 PATH에(여기에 추가가되었든 없어졌든):로 경로에 실행되는지 여부를 판단하면서 실행한다.
signal 세팅, 메모리 할당등 대부분을 것들은 싹 초기화한다. 자세한것은
fork해서 malloc을 한것을 읽을 때 이게 그대로 남아있는가를 찾아보다 알게 된 정보 운영체제가 fork를 할때 모든 부분에 새로 메모리 할당을 하는 것이아닌 해당 메모리를 write하려고할때 할당을 하는 방식으로 최적화를 하는 방법이다.