그럴듯한 개발 블로그
Published 2023. 3. 22. 20:59
wait함수에 대해서... <고민했던거>
반응형

minishell 과제에 새로 추가된 허용함수를 정리중 이상한 것을 발견했다..
 

#include <sys/wait.h>
pid_t wait(int *stat);

 
wait 함수는 자식 프로세스가 종료될 때까지 기다린다.
그런데 함수 인자로 주어진 *stat은 현 상황을 저장하기 위해 주소로 받은 인자로 자식 프로세스에 관한 정보가 아니다.
 
여태 과제에서 주어진 허용 함수는 참고하고 싶거나 저장하고 싶은 데이터를 인자로 받았었다.
예를 들어 malloc (size) 는 size만큼 메모리를 할당 free(addr) addr에 접근해서 메모리 해제 sleep(sec) sec만큼 기다림 등등
그런데 wait(stat) 에선 인자로 받지 않은 자식 프로세스의 정보를 어디선가 받고 그동안 기다리는 함수인데 어떤 식으로 동작하는지 궁금해서 구글링을하다가 system call 함수에 대해 알게되었다.
 
함수는 System Call / Library Call 함수로 나뉘는데
System Call Function은 UNIX/LINUX와 같은 OS(Operating System)의 Kernel에 서비스를 요청할 때 호출하는 함수를 말한다. 이들은 주로 hardware와 관련된 서비스나 프로세스의 생성/종료, 파일의 I/O 등을 처리하며 System Call 시에는 프로그램이 User 모드가 아닌 Kernel 모드로 실행된다. 잦은 System Call은 시스템 resource를 효율적으로 사용할 수 없다.  대표적인 System Call Function으로는 fork, execve, _exit, kill, open, read, write, close 등의 함수가 있다.
Library Call도 내부적으로는 System Call을 사용하기도 하지만, 개발을 쉽게 할 수 있도록 기능을 제공한 Utility성 함수, System Call을 최소화하기 위한 Wrapping 함수들이 있다. 대표적인 Library Call Function으로는 Utility성 함수인 strcmp, strcpy, strlen, memset 등과 System Call 최소화를 위한 fopen, fclose, fread, fwrite, exit, malloc, free 등의 함수들이 있다.
//System Call Function이 자주 호출되면 시스템 성능에 영향을 주기때문에 최대한 자제해야 한다.
 
시스템 콜 함수인 wait 함수는 프로세스 종료 시그널(sigchld)을 받을 때까지 sleep 상태로 기다린다는 것을 알게 되었다.  인자로 받지 않은 전역변수가 아닌 데이터에 접근할 수 있는 게 아니었다. 편-안
+ 자식프로세스가 하나도 없으면 바로 종료된다
 
 
 

반응형
profile

그럴듯한 개발 블로그

@donghyk2

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