
1. exec() 시스템콜
exec() 을 실행이 되면 새로운 프로세스를 만들지 않고 현재 프로세스 공간을 exec안에 인자로 실행파일 이름/인자 등을 넣어준다. 해당 프로세스 공간에 덮어 씌운다. (TEXT, DATA, BSS 영역을 덮어씌운다.)
새로운 실행파일처럼 동작을 한다.
1.1. exec() 시스템콜 family

2. execl() 와 execlp() 시스템콜 사용법

→ default 로 대부분 bin이 path로 설정되어 있으므로
execlp 첫번째 인자는 디폴트로 설정되어 있는 환경변수 path값을 참조해서 실행파일을 실행하므로 파일이름만
2.1. execle() 시스템콜의 사용법

→ execle 은 execlp 의 NULL 인자 까지는 똑같다.
맨 마지막에 string 변수가 들어간다. string 변수를 미리 선언해줘야 한다.
string 변수는 환경변수를 따로 설정해야 한다.
실행파일에 환경변수들은 무한대로 넣어줄 수 있다.
마지막에 NULL 로 끝나야 한다. ( (char *) 0 이 null 이다.)
( execlp 가 path 를 가지고와서 실행. execl 은 환경변수 사용x )
2.2. execv(), execvp(), execve() 시스템콜 사용법

3. 정리

execlp() 는 환경 변수를 보고 실행파일을 실행. 전체 디렉토리명까지 넣어줄 필요 없다.
execl() 는 파일명을 전체경로 포함 넘겨준다.
execle() 는 환경변수를 포함해서 별도로 환경변수값들을 미리 설정해서 특별하게 넣어줘야한다.
V와 l의 차이는 인자를 변수로 설정해서 넣어주겠냐, 아니면 직접써주겠냐의 차이이다.

execl() 시스템콜의 예
1. execl() 시스템콜을 실행시킨 프로세스 공간에 새로운 프로세스 이미지를 덮어씌우고, 새로운 프로세스를 실행
2. perror() 함수가 호출된다는 의미는 새로운 프로세스 이미지로 덮어씌우는 작업이 실행되지 못했다는 의미
→ 즉, execl()시스템콜 실행 실패
3.1. fork()와 exec()
- 리눅스 프로세스 실행
1. 부모 프로세스로부터 새로운 프로세스 공간을 만들고 부모 프로세스 데이터 복사(fork)
2. 새로운 프로세스를 위한 바이너리를 새로운 프로세스 공간에 덮어씌움(exec)
왜 두개를 나눴을까?

fork와 exec가 순차적으로 실행이 되서 자식 프로세스가 생성이 된다. 이것이 리눅스의 프로세스 생성 방식이다.
제로베이스 컴퓨터 공학 전공자 따라잡기 강의 정리한 내용입니다.
'CS > 시스템 프로그래밍' 카테고리의 다른 글
프로세스 생성(copy on write) (0) | 2022.03.02 |
---|---|
프로세스 생성(wait) (0) | 2022.03.02 |
프로세스 생성(fork) (0) | 2022.03.02 |
프로세스 ID (0) | 2022.03.02 |
ABI와 표준 (0) | 2022.03.02 |