리눅스에서 fork & exec, system...
안녕하세요
제가 알기로 리눅스에서 어떤 프로세스 a 가
system("prog");
를 호출하게되면 먼저 fork 를해서 자식프로세스를 만들고
자식프로세스는 exec 계열 함수를 이용해서
/bin/sh 를 호출하고 그 파라미터로 -c prog 를 주게 되는거로 알고있는데요...
그렇다면 /bin/sh -c prog 가 수행될때
sh 은 다시 fork & exec 를 하게되니까
결과적으로
a 가 fork 를 하고, 그 차일드 프로세스(/bin/sh) 가 다시 fork 를 해서
prog 가 실행되는것 아닌가요?
그런데 pstree 라는 프로그램을 통해서 이걸 확인해보려하니까
중간에 /bin/sh 가 들어가는부분없이 그냥 바로 a 의 자식프로세스가 prog 인거로
나오더군요
제가 뭔가 잘못알고있는부분이 있는걸까요?
조언부탁드립니다.
PS. file descriptor 에 대해 알아보던중
ls /proc/.../fd
이것을 몇몇 프로세스에 해보다보니
보통은 0, 1, 2 만 열려있는데
어떤건 255 가 열려있는 프로세스가 있더군요, 이건 정체가 뭘까요??
PS2. fork 한 프로세스가 exec 를 호출할때 pid, ppid, fd array 를 그대로 상속받는거로
알고있는데요, pending signal 과 signal handler의 경우는 어떻게 되나요?
exec 로 변신(?) 을 할때 변신하기 전의 프로세스로부터 영향을받는것들이 위의것들 말고 또 있나요?
댓글 달기