꾸준하게 기록하기
article thumbnail

 

1. exec() 시스템콜

 

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

새로운 실행파일처럼 동작을 한다.

 

1.1. exec() 시스템콜 family

execvpe 가 아니라 execve

 

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가 순차적으로 실행이 되서 자식 프로세스가 생성이 된다. 이것이 리눅스의 프로세스 생성 방식이다.

 

 

 

 

제로베이스 컴퓨터 공학 전공자 따라잡기 강의 정리한 내용입니다.
728x90

'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
profile

꾸준하게 기록하기

@:_:

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!