목록유닉스(Unix)/시스템 프로그래밍 (33)
K 개발자
시그널 핸들러 함수 시그널 핸들러 지정 : signal(3) #include void (*signal(int sig, void (*disp)(int)))(int); // sig : 시그널 핸들러로 처리하려는 시그널, disp : 시그널 핸들러의 함수명 시그널 핸들러 지정 : sigset(3) #include void (*sigset(int sig, void (*disp)(int)))(int); // sig : 시그널 핸들러로 처리하려는 시그널, disp : 시그널 핸들러의 함수명
시그널 보내기 함수 시그널 보내기 : kill(2) #include #include int kill(pid_t pid, int sig); // pid : 시그널을 받을 프로세스의 ID, sig : pid로 지정한 프로세스에 보내려는 시그널 시그널 보내기 : raise(3) #include int raise(int sig); // sig : 보내려는 시그널 번호 시그널 보내기 : abort(3) #include void abort(void);
시그널의 개념 시그널signal은 프로세스에 뭔가 발생했음을 알리는 간단한 메시지를 비동기적으로 보내는 것이다. 이 메시지는 무엇이 발생했는지를 표시하는 미리 정의된 상수를 사용한다. 시그널을 받은 프로세스는 시그널의 종류에 따라 적절한 처리 방법을 지정할 수 있다. 시그널의 발생 시그널은 소프트웨어 인터럽트software interrupt다. 시그널은 비동기적으로 발생하며, 유닉스 운영체제가 프로세스에 전달한다. 시그널 처리 방법 프로세스가 받은 시그널에 따라 기본 동작default action을 수행한다. 각 시그널에는 기본 동작이 지정되어 있다. 대부분 시그널의 기본 동작은 프로세스를 종료하는 것이다. 이외에 시그널을 무시하거나 프로세스의 수행 일시 중지suspend/재시작resume 등을 기본 동..
좀비 프로세스 fork 함수로 자식 프로세스를 생성하면 부모 프로세스와 자식 프로세스는 순서에 관계없이 실행되고, 먼저 실행을 마친 프로세스는 종료한다. 그러나 부모 프로세스와 자식 프로세스 사이의 종료 절차가 제대로 진행되지 않을 때가 있다. 이때 좀비 프로세스zombie process 같은 불안정 상태의 프로세스가 발생하는데, 이를 방지하려면 부모 프로세스와 자식 프로세스를 동기화해야 한다. 프로세스 동기화 프로세스 동기화 : wait(3) #include #include pid_t wait(int *stat_loc); // stat_loc : 상태 정보를 저장할 주소 특정 자식 프로세스와 동기화 : waitpid(3) #include #include pid_t waitpid(pid_t pid, in..
exec 함수군의 함수 형태 exec 함수군은 path나 file에 지정한 명령이나 실행 파일을 실행한다. 이때 arg나 envp로 시작하는 인자를 path나 file에 지정한 파일의 main 함수에 전달한다. 각 함수별로 경로명까지 지정하거나 단순히 실행 파일명만 지정하는 등 차이가 있고, 인자를 전달하는 형태에도 차이가 있다. #include int execl(const char *path, const char *arg0, …, const char *argn, (char *)0); int execv(const char *path, char *const argv[]); int execle(const char *path, const char *arg0, …, const char *argn, (char *..
프로세스 종료 함수 프로그램 종료 : exit(2) #include void exit(int status); // status : 종료 상태값 프로그램 종료 시 수행할 작업 예약 : atexit(3) #include int atexit(void (*func)(void)); // func : 종료 시 수행할 작업을 지정한 함수명 프로그램 종료 : _exit(2) #include void _exit(int status); // status : 종료 상태값
간단한 방법 프로그램 실행 : system(3) #include int system(const char *string); // string : 실행할 명령이나 실행 파일명 프로세스 생성 fork 함수가 생성한 새로운 프로세스를 자식 프로세스child process라고 한다. 한편 fork 함수를 호출한 프로세스는 부모 프로세스parent process가 된다. 프로세스 생성: fork(2) #include #include pid_t fork(void); 프로세스 생성 : vfork(2) #include pid_t vfork(void);
환경 변수의 이해 환경 변수는 '환경 변수명 = 값' 형태로 구성되며, 환경 변수명은 관례적으로 대문자를 사용한다. 환경 변수는 쉘에서 값을 설정하거나 변경할 수 있으며, 함수를 이용해 읽거나 설정할 수도 있다. 환경 변수 사용 전역 변수 사용 : environ #include extern char **environ; main 함수 인자 사용 int main(int argc, char **argv, char **envp) { … } 환경 변수 검색 : getenv(3) #include char *getenv(const char *name); // name : 환경 변수명 환경 변수 설정 : putenv(3) #include int putenv(char *string); // string : 설정할 환경 ..