- 자료 출처 : www.joinc.co.kr
* fork는 자식프로세스를 만들기 위해서 사용되는 프로세스 생성기이다.
#include <unistd.h>
pid fork(void);
실패할 경우 -1을
성공할 경우 자식 프로세스는 0, 부모 프로세스는 이외의 값이 리턴된다.
* execl() : 현재 프로세스 이미지를 새로운 프로세스 이미지로 바꾼다.
#include <unistd.h>
int execl(const char *path, const char *arg, ...);
처음 인자 : 파일의 경로
두번째 부터의 인자 : 파일의 경로에 넘겨줄 인자
마지막 인자 : 널(0, NULL)값을 써주어야 한다.
* wait() : 자식 프로세스 종료를 기다린다.
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
자식프로세스가 종료할때까지 해당영역에서 부모프로스쓰가 sleep 모드로 기다리게 된다.
이는 자식프로세스와 부모프로세스의 동기화를 위한목적으로
부모프로세스가 자식프로세스보다 먼저 종료되어서
자식프로세스가 고아 프로세스(PPID 가 1)인 프로세스가 되는걸 방지하기 위한 목적이다.
자식 프로세스가 종료되었다면 함수는 즉시 리턴되며,
자식이 사용한 모든 시스템자원을 해제한다.
wait()의 인자 status 를 통하여 자식 프로세스의 상태를 받아올수 있는데,
자식프로세스의 상태값은 자식프로세스의 종료값 * 256(FF) 이다.
wait(NULL);
* waitpid() : 자식 프로세스의 종료를 기다린다.
#include <sys/types.h>
#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *status, int options);
waitpid 함수는 인수로 주어진 pid 번호의 자식프로세스가 종료되거나,
시그널 함수를 호출하는 신호가 전달될때까지 waitpid 호출한 영역에서 일시 중지 된다.
- < -1 프로세서 그룹 ID가 pid 의 절대값과 같은 자식 프로세스를 기다린다.
- -1 임의의 자식프로세스를 기다린다. 이것은 wait(2) 와 동일하다.
- 0 프로세스 그룹 ID가 호출 프로세스의 ID와 같은 자식프로세스를 기다린다.
- > 0 프로세스 ID가 pid 의 값과 같은 자식 프로세스를 기다린다.
- -1 임의의 자식프로세스를 기다린다. 이것은 wait(2) 와 동일하다.
매크로
- 예제코드 -
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
int main()
{
int pid;
int status;
pid = fork();
if (pid < 0)
{
perror("fork error : ");
exit(0);
}
if (pid == 0)
{
printf("Im Child\n");
sleep(10);
return 2;
}
else
{
printf("Parent: wait (%d)\n", pid);
waitpid(pid, &status, 0);
if (WIFEXITED(status))
{
printf("정상종료\n");
printf("리턴값 %d\n", WEXITSTATUS(status));
}
else if (WIFSIGNALED(status))
{
printf("신호받았음\n");
printf("신호번호 %d\n", WTERMSIG(status));
}
}
exit(0);
}
[출처] fork() execl() wait()|작성자 열혈청년
'컴퓨터 > 언어,프로그래밍' 카테고리의 다른 글
dup2() (0) | 2009.05.27 |
---|---|
dup2 (1) | 2009.05.27 |
fork 함수와 wait 함수의 이해! 자식프로세스의 시작.. 그리고 끝! (0) | 2009.05.27 |
Linux system() 와 fork(), execl() 사용 (0) | 2009.05.27 |
프로세스 (0) | 2009.05.26 |