현재 실행중인 프로그램. 문맥 = 상태.
queue에 들어가서 실행을 기다리고 있음. (ex. ready queue, resource queue, I/O queue)
유기적으로 상태가 변경됨.
운영체제가 각 프로세스를 관리하기 위해 프로세스 당 유지하는 정보.
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정.
**SYstem call 이나 Interrupt 발생 시 반드시 context switch가 일어나는 것은 아님.
basic unit of CPU utilization. 전통적인 개념의 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다.
자발적 종료(exit) : 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌.
비자발적 종료(abort) :
1) 자식이 할당 자원의 한계치를 넘어섬.
2) 자식에게 할당된 task가 더이상 필요하지 않음
3) 부모가 종료함
int main()
{
pid_t pid;
printf("Before fork() call\n");
pid = fork();
if (pid == 0)
printf("This is Child process. PID is %d\n", pid);
else if (pid > 0)
printf("This is Parent process. PID is %d\n", pid);
else
printf("fork() is failed\n");
return 0;
}
int main()
{
printf(execute is\n");
execl("/bin/ls", "ls", "-al", NULL);
perror("execl is failed\n"); //에러 코드 출력
exit(1); //에러 코드 전달
}