보통 프로세스에서 exec(3) 를 시켜서 새로운 프로세스를 실행시키면
이 새로운 프로세스는 기존의 프로세스의 이미지를 덮어쓰게 된다.
그러면서 특별한 설정이 없을경우 열린파일지정자를 그대로 넘겨주게 된다.
exec 하면서 열린파일지정자가 상속되었음을 알수 있다.
그러나 때때로 exec 를 이용해서 프로세스를 만들기전에 기존에 열렸던
파일지정자들을 깨끗하게 정리하고 싶을때가 있을것이다.
이러한 경우를 close-on-exec 시킨다라고 말한다.
어떻게 하냐? fcntl함수를 이용해서 열린 파일지정자에 대해서 close-on-exec 작동을
하도록 할수 있다.
close-on-exec 값을 조정하기 위해서 사용된다. F_GETFD 를 이용해서 FD_CLOEXEC 값을 가져오고
F_SETFD 를 이용해서 이 값을 변경한다. 기본적으로는 exec 할때 close 되지 않는다.
예제 : open-on-exec.c #include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int main()
{
int fd;
int val;
fd = open("exec_copy.txt", O_CREAT);
execl("/home/my_cvs/test/c_source/loop", "./loop", 0);
}
execl 로 실행시키는 loop 프로그램은 그냥 무한루프 도는 프로그램 이니 각자 만들기 바란다.
위 프로그램을 실행시킨후 ps 를 확인하고 /proc/pid/fd 로 이동해서 ls 를 해보면
[root@coco fd]# ls -al
합계 0
dr-x------ 2 root root 0 10월 25 13:59 .
dr-xr-xr-x 3 root root 0 10월 25 13:59 ..
lrwx------ 1 root root 64 10월 25 13:59 0 -> /dev/ttyp0
lrwx------ 1 root root 64 10월 25 13:59 1 -> /dev/ttyp0
lrwx------ 1 root root 64 10월 25 13:59 2 -> /dev/ttyp0
lr-x------ 1 root root 64 10월 25 13:59 3 -> /home/mycvs/test/exec_copy.txt
exec 하면서 열린파일지정자가 상속되었음을 알수 있다.
[출처] close-on-exec|작성자 withjesus78
'QnA' 카테고리의 다른 글
Hardware flow control Vs. Software flow contorl (0) | 2009.07.06 |
---|---|
[Q/A] nCS, nOE, nWE ? (0) | 2009.07.06 |
[Q/A] volitile 포인터에 대해서 질문입니다. (0) | 2009.06.23 |
[Q/A] Address decoding (0) | 2009.06.22 |
[답변] PCI Device의 BASE ADDRESS 처리에 대한 ? (0) | 2009.06.17 |
WRITTEN BY
- RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.