리눅스에서 프로세스 시작과 관련된 함수
: system(), fork()
종료와 관련된 함수
: wait(), waitpid(), exit()
##### system()
#include <dtdlib.h>
int system(const char *string);
프로그램 수행도중 새로운 명령이나 프로그램 수행 가능
string : 명령 (sleep 3, ls ...)
##### fork()
#include<unistd.h>
pid_t fork(void);
프로세스 생성
부모프로세스로부터 만들어지며, 부모 프로세스와 같은 공간의 코드를 수행하지만 자기자신만의 데이터 공간 및 FDT등의 실행 환경을 구성
고유한 PID를 갖고, 부모프로세스의 PID를 자신의 PPID에 저장
부모 프로세스로부터 시그널 등도 상속받음
부모프로세스의 함수와 자식 프로세스의 함수에서는 서로 다른 값을 반환하여, 각 프로세스에서 수행할 일을 구분하게 됨
(부모 return : 정상 시 자식프로세스 PID, 자식 return : 정상 시 0)
fork() 실패 시 -1 rerutn.
- 메모리 부족 : errno 변수에 ENOMEM 설정
- 자식 프로세스 개수의 제한 : errno변수에 EAGAIN 설정
##### wait()
: 자식프로세스의 종료까지 책임이 부여되는 함수
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *stat_loc);
case 1. 자식프로세스가 존재하는 경우
wait() 호출 -> 자식프로세스가 시그널을 보낼 때 까지 부모프로세스의 수행 중지 -> 자식프로세스의 PID반환
case 2. 자식프로세스가 존재하지 않는 경우
wait() 호출 -> -1 반환 -> errno 변수에 ECHILD 설정
case 3. 부모 프로세스에서 자식 프로세스의 종료 원인을 자세히 알고싶은 경우
인수로 상태정보를 읽어 올 수 있는 변수를 넘겨줌 -> 종료 상태 확인(sys/wait.h의 매크로 사용)
<관련 매크로>
'System > Linux Kernel' 카테고리의 다른 글
CFS 구현의 핵심 (0) | 2016.01.22 |
---|---|
커널에서 원하는 값을 가지고오기 위해 clz를 하는 이유 (0) | 2016.01.16 |
[Unix V6] 시스템 부팅 (0) | 2015.12.19 |
Device Tree, 리눅스 커널 4.0 (0) | 2015.08.29 |
메모리관리 (0) | 2015.08.18 |