Computer Security

#31 프로그램 실행과 종료처리 (실습) 본문

리눅스 시스템 프로그래밍

#31 프로그램 실행과 종료처리 (실습)

쿠리 Kuri 2022. 10. 6. 18:30
반응형

fork를 한 이후에 exec을 통해서 외부에 다른 프로그램을 실행하고 child process가 종료되면 종료코드를 작성해보자.

 

 

 

 


1. 이전에 작성했던 fork.c 를 exec.c 로 카피해주자.

fork.c

 

 

 

 

 


2. child process인경우 execl() 명령어를 통해 다른 명령을 실행해보자.

int execl(const char *path, const char *arg, .../* (char *) NULL */);

ls 명령은 /bin/ls 에 있다. execl을 이용해서 ls를 출력해보자. 

 

 

i) path : "/bin/ls"

 

ii) const char *arg : "ls", "-al"

 

iii) NULL

 

iv) 예외처리 해준다.

 

 

 

 

 

 


3. wait() API를 이용해서 child process가 종료될때까지 기다리자.

#include <sys/types.h>
#include <sys/wait.h>


pid_t wait(int *wstatus);

파라미터

- wstatus : child process의 종료 상태

 

반환 값

- 성공 시 : terminated 된 자식 프로세스의 pid

- 실패 시 : -1

 

 

i) int exit_status : 변수 선언

 

ii) pid = wait(&exit_status) : child process가 종료될때까지 기다리고 종료되면 exit_status변수에 종료상태의 값이 넣어진다.

 

iii) 예외 처리한다. 정상종료 됐을경우 return 값이 무엇인지 출력하게해준다.

 

 

 

 

 

 


4.  전체 코드이다.

exec.c

 

 

 

 

 


5. gcc 컴파일 한 뒤, ./exec를 하기전 ./fork 를 먼저 살펴보자.

./fork

i) original process= parent process

 

ii) test function을 호출해 child process pid가 출력되었다.

 

 

 

 

 

 


6. ./exec를 실행시켜 보자.

./exec

i) original process pid = 5256 (parent 역할)

 

ii) child pid = 5257

 

iii) test function이 출력됐다.

 

iv) wait해서 blocking 상태가 되어 기다렸는데, 그상황에서 child proces가 뜨니 ls -al 명령이 실행됐다!

 

v) child 5257이 return 0(성공

반응형
Comments