리눅스 프로세스(태스크) 상태 확인
- R:Running:실행 상태
- S:Sleeping:대기 상태
- W:Waiting:준비 상태
- S:Stopped:종료 상태
- Z:Zombie:프로세스 종료 후 자원이 반환되었지만 커널 영역에 프로세스가 남아 있는 상태
Fork-exec
- fork:복사본 만들기
- exec:새로운 코드로 대체(덮어쓰기)
프로세스 생성하기-fork
pid_t fork(void);
- Parameter
- Return
- 성공시(부모 프로세스의 경우) 자식 프로세스의 PID.(자식 프로세스의 경우) 0
- 실패시(부모 프로세스의 경우)-1, (자식 프로세스의 경우) 미생성
PID와 PPID
pid_t getpid(void);
pid_t getppid(void);
- Parameter
- Return
- getpid:현재 프로세스의 PID
- getppid:부모 프로세스의 PID
새로운 프로그램으로 프로세스 메모리 채우기-exec family
- 함수 명의 알파벳
- l:리스트 형식으로 인자 전달(arg0, arg1, .., NULL)
- v:벡터(문자열) 형식으로 인자 전달
- p:기본 환경 변수($PATH)에서 찾음
- e:새로운 환경 변수 설정 가능
- Return
- 환경 변수 PATH:실행 파일의 경로
- export PATH=$PATH
종료-exit
void exit(int status);
- Parameter
- status:종료 상태(0==정상 종료, 이외==비정상)
- Return
자원의 반환
- 자식 프로세스가 종료되었을때 부모 프로세스가 종료를 처리해주지 않으면 자식프로세스는 Zombie Process가 된다.
- Zombie Process
- 프로세스는 종료되었으나 부모 프로세스가 종료를 처리하지 않아 커널이 관리하는 프로세스 목록(프로세스 테이블)에 남아있는 상태 자원의 완전한 해제가 이루어지지 않음->자원 낭비
자식 프로세스가 종료할 때까지 대기하기
pid_t wait(int *wstatus);
- Parameter
- wstatus:종료된 child process의 상태 저장(포인터가 가리키는 변수에 자식 프로세스 종료시 리턴하거나 exit함수 호출시 전달한 인자값이 저장됨)
- Return
- 성공시 종료된 자식프로세스의 PID
- 실패시 -1
- waitpid, wait4