리눅스에서 실행되는 프로그램, 코드를 의미합니다.
프로세스는 메모리 상에 올라가 있게 되고, CPU에 의해 처리됩니다.
CPU가 프로세스를 처리하는 순서를 정하는 활동을 의미합니다.
이때 스케줄링 알고리즘
을 이용해서 효율적으로 프로세스를 처리할 수 있도록 합니다.
Running
: CPU에 의해 처리되고 있는 상태Waiting
: CPU에 의한 처리를 기다리고 있는 상태Blocked
: CPU에 의한 처리를 보류하고 있는 상태(디스크에 정보를 기록하는 중이라면 CPU가 관여하지 않는 활동이고 이때 CPU는 다른 프로세스를 처리하는 것이 효율적)프로세스는 아래와 같이 계층 구조를 갖게 됩니다.
자식 프로세스를 종료할 때는 부모 프로세스가 관여하여 자식 프로세스를 완벽하고 깔끔하게 종료시킵니다.
프로세스를 종료할 때 이 계층 구조를 고려하지 않게 되면 고아 프로세스
와 좀비 프로세스
가 생성되게 됩니다.
고아 프로세스
: 부모 프로세스가 종료된 경우 자식 프로세스는 고아 프로세스
가 됩니다. 이때는 init 프로세스에 자식 프로세스를 입양시켜서 init 프로세스를 통해 자식 프로세스를 종료시킬 수 있습니다.
좀비 프로세스
: 부모 프로세스는 자식 프로세스가 종료하려 하면 신호(signal
)을 받고 자식 프로세스를 완벽히 종료시키는데, 다른 활동을 하느라 바빠서 자식 프로세스를 완벽히 종료시킬 수 없을 때 자식 프로세스는 좀비 프로세스
가 됩니다. 좀비 프로세스는 동작하진 않지만 리눅스 상에 남아있게 되어 메모리를 잡아 먹는 등의 시스템 상의 리소스를 낭비하게 됩니다.
#0
) : stdin (keyboard)#1
) : stdout (display)#2
) : stderr (display)# 보통 코딩할 때 파일 객체를 만들고 거기다가 씁니다
fd = open(....)
write(fd, 내용)
프로세스
를 통해 열린 파일 디스크립터 목록을 관리합니다.보이지 않는 곳에서 어떤 일을 하는 유령
에서 영감을 받았다고 합니다.IPC
)외울 필요는 없지만 필요할 때 찾아볼 수 있도록 합시다.