2.1 프로세스
2.1.1 개요
프로세스는 현재 실행중인 하나의 프로그램
프로세스마다 왼쪽 가상메모리 공간이 따로 존재한다.
프로세스의 주소공간은 세그먼트 블럭으로 나뉘어져 있다.
"프로세스는 혼자서 가상메모리 공간을 다 사용한다고 생각한다"
2.1.2 프로세스 생성
int system(const char* command);
기능 |
/bin/sh -c command를 실행하는 것과 동일. 실행 후 명령이 종료될 때까지 sleep하면서 기다림. |
리턴 |
자식 생성 실패 시 -1 리턴 command 가 NULL 이면 /bin/sh 존재 시 0, 존재하지 않을 시 0 이외의 값 리턴 그 이외의 경우 /bin/sh 의 종료 상태 (0x????, exit code (8비트) + 시그널번호 (8비트) ) 리턴 /bin/sh 이 없거나 command 가 정상 실행될 수 없다면 exit code = 0x7f command 가 정상적으로 실행되면 exit code 는 command를 따른다 |
command |
쉘에서 실행할 명령 |
예시 |
ret = system("ls -l"); |
int execl(const char* path, const char* arg, ...);
int execlp(const char* file, const char* arg, ...);
기능 |
현재 프로세스를 새로운 프로세스로 교체 |
리턴 |
에러 발생 시 errno 설정 후 -1 리턴, 성공 시 리턴 없음 |
path |
교체 실행될 프로그램의 경로 (절대 경로, 상대 경로) |
file |
교체 실행될 프로그램의 이름 |
arg |
교체되어 실행될 프로그램에 전달될 인자 (2개 이상 가능, 반드시 NULL로 끝나야 함) |
예시 |
ret = execl("/bin/ls", "ls", "-l", NULL); |
pid_t fork(void);
기능 |
자신을 복제하여 자식 프로세스 생성 |
리턴 |
성공 시 부모 프로세스는 자식 프로세스의 PID, 자식 프로세스는 0 리턴 실패 시 부모 프로세스는 errno 설정 후 -1 리턴 실패 시 자식 프로세스는 생성되지 않음 |
pid_t wait(int* status);
기능 |
자식 프로세스 중 아무나 종료되기를 기다림 |
리턴 |
성공 시 종료된 자식 프로세스의 PID, 실패 시 errno 설정 후 -1 리턴 |
status |
NULL이 아니면 status가 가리키는 곳에 종료 상태가 저장됨 |
pid_t waitpid(pid_t pid, int* status, int options);
기능 |
특정 PID를 가진 자식 프로세스의 종료를 기다림 |
리턴 |
성공 시 종료된 자식 프로세스의 PID, 실패 시 errno 설정 후 -1 리턴 WNOHANG 옵션의 경우 자식 프로세스가 종료되지 않은 경우 0 리턴 |
pid |
정수값 : 종료를 기다리는 자식의 PID값 -1 : 자식 프로세스 중 아무자 종료되기를 기다림 -1 미만 : PGID의 음수값 (절대값이 프로세스 그룹 ID라는 뜻) 해당 그룹의 자식 프로세스의 종료를 기다림 |
options | WNOHANG : 자식 프로세스의 종료를 기다리지 않고 즉시 리턴 |
좀비 상태 : 자식 프로세스 종료 후 부모 프로세스가 no wait();
양자 상태 : 자식 프로세스보다 부모가 먼저 종료
부모가 먼저 종료되면 자식의 부모 프로세스는 자동적으로 init 이 됨.
'한국으로 > 임베디드 리눅스' 카테고리의 다른 글
3.3 공유 메모리 (0) | 2018.06.27 |
---|---|
3.2 세마포어 (0) | 2018.06.27 |
3.1 파이프 (0) | 2018.06.27 |
2.2 시그널 (0) | 2018.06.27 |
1.6 파일 입출력 (0) | 2018.06.27 |
1.5 응용 프로그램 (0) | 2018.06.26 |
1.4 개발환경 구축 (0) | 2018.06.26 |
1.3 vi/vim editor (0) | 2018.06.26 |