C 프로세스 제어
1. 개요
C 프로세스 제어는 C 프로그래밍 언어에서 프로그램의 실행을 제어하는 데 사용되는 함수들을 의미한다. `stdlib.h` (C++) 또는 `cstdlib` 헤더 파일에 정의되어 있으며, 프로그램 종료, 종료 시 호출될 함수 등록, 환경 변수 접근, 호스트 환경 명령 프로세서 호출 등의 기능을 제공한다. 주요 함수로는 abort, exit, _Exit, atexit, quick_exit, at_quick_exit, getenv, system 등이 있다.
| 자료형 | C 자료형 |
|---|---|
| 문자 분류 | C 문자 분류 |
| 문자열 처리 | C 문자열 처리 |
| 수식 함수 | C 수식 함수 |
| 파일 입출력 | C 파일 입출력 |
| 날짜와 시간 함수 | C 날짜와 시간 함수 |
| 지역화 함수 | C 지역화 함수 |
| 메모리 할당 | C 동적 메모리 할당 |
| 프로세스 제어 | C 프로세스 제어 |
| 시그널 | C 시그널 처리 |
| 대체 토큰 | C 대체 토큰 |
2. 프로그램 종료 함수
프로세스 제어 함수들은 `stdlib.h` 헤더(C++에서는 `cstdlib` 헤더)에 정의되어 있다.
2.1. abort
https://en.cppreference.com/w/c/program/abort abort 함수는 정리 작업 없이 비정상적인 프로그램 종료를 수행한다. 이 함수는 C 표준 라이브러리의 `stdlib.h` (C++ 에서는 `cstdlib`) 헤더 파일에 정의되어 있다.
2.2. exit
`exit` 함수는 정상적인 프로그램 종료를 수행한다. C 표준 함수이며, `stdlib.h` (C++ 에서는 `cstdlib`) 헤더 파일에 정의되어 있다.
`exit` 함수는 호출 시 다음 작업을 수행한다.
* `atexit` 함수를 통해 등록된 모든 종료 처리 함수들을 호출한다.
* 열린 모든 C 스트림을 닫고, 버퍼의 내용을 출력(flush)한다.
* 운영 체제에 제어를 반환하고, 종료 상태 코드를 전달한다.
```cpp
#include
void exit(int status);
```
* `status`: 운영체제에 반환할 종료 상태 코드. 일반적으로 0은 성공, 0이 아닌 값은 오류를 나타낸다.
`exit` 함수는 `abort` 함수와는 다르게, 비정상적인 종료가 아닌 정상적인 프로그램 종료를 처리한다. `_Exit` 함수는 정리 작업을 수행하지 않고 종료하며, `quick_exit`함수는 최소한의 정리 작업만 수행하고 종료한다.
2.3. _Exit
`_Exit` 함수는 C99 표준에서 추가된 함수로, 정리 작업 없이 정상적인 프로그램 종료를 수행한다. 이 함수는 `stdlib.h` 헤더 파일(C++에서는 `cstdlib`)에 정의되어 있다.
2.4. atexit
`atexit` 함수는 `exit` 함수가 호출될 때 실행될 함수를 등록하는 데 사용된다. 이 함수는 C 표준 라이브러리의 일부로, `stdlib.h` 헤더 파일 (C++ 에서는 `cstdlib` 헤더)에 정의되어 있다.
```cpp
#include
int atexit(void (*function)(void));
```
`atexit` 함수는 매개변수로 종료 시에 호출될 함수 포인터를 받는다. 등록된 함수는 `exit` 함수가 호출될 때, 프로그램이 정상적으로 종료되는 과정에서 역순으로 호출된다. 즉, 마지막에 등록된 함수가 가장 먼저 호출되고, 처음에 등록된 함수가 가장 나중에 호출된다.
```cpp
#include
#include
void cleanup1(void) {
printf("cleanup1 함수 호출됨\n");
}
void cleanup2(void) {
printf("cleanup2 함수 호출됨\n");
}
int main() {
atexit(cleanup1);
atexit(cleanup2);
printf("메인 함수 종료\n");
exit(0); // 또는 return 0;
}
```
위 코드를 실행하면 다음과 같은 결과가 출력된다.
```
메인 함수 종료
cleanup2 함수 호출됨
cleanup1 함수 호출됨
2.5. quick_exit
C11 표준에서 추가된 함수로, 정리 작업 없이 정상적인 프로그램 종료를 수행하지만, 입출력(I/O) 버퍼는 비운다.
2.6. at_quick_exit
C11 표준부터 지원되는 `at_quick_exit` 함수는 `quick_exit` 함수 호출 시 실행될 함수를 등록한다.
3. 환경과의 통신 함수
C 프로세스 제어에서 환경과의 통신 함수는 프로그램 실행 환경과 상호작용한다. `getenv` 함수는 환경 변수 목록에 접근하며, `system` 함수는 호스트 환경의 명령 프로세서를 호출한다. 이 함수들은 `stdlib.h` 헤더 파일 (C++ 에서는 `cstdlib` 헤더 파일)에 정의되어 있다.
3.1. getenv
`getenv` 함수는 환경 변수 목록에 접근하여 특정 환경 변수의 값을 가져온다. 이 함수는 `stdlib.h` (C++ 에서는 `cstdlib`) 헤더 파일에 정의되어 있다.