프로세스

https://pupuduck.tistory.com/63에서는 멀티프로세스 기반의 서버구현에 대해 다뤘는데, 프로세스의 생성은 select나 epoll에 비해 확실히 구분되는 장점이 있지만 큰 단점들이 있었습니다. 프로세스 생성 자체가 부담스럽다. 두 프로세스 사이에서 데이터 교환을 위해선 별도의 IPC 기법을 거쳐야 한다 컨텍스트 스위칭이 초당 수십번에서 수천번까지 일어난다. 여기서 컨텍스트 스위칭이란 A프로세스와 B프로세스가 있고 메인 메모리에 A프로세스가 있을 때, B프로세스를 실행하기 위해 A프로세스 관련 데이터를 메인 메모리에서 하드디스크로 이동시키고 B프로세스를 메인 메모리에 이동시키는 것입니다. 이 과정이 초당 수십번에서 수천번 일어나는 것은 큰 부담이 아닐 수 없습니다. 이 여러 단점을 최..
부모 프로세스에서 자식 프로세스의 종료를 계속 확인하기에는 비효율적입니다. 자식 프로세스의 종료를 인식하는 주체는 운영체제이므로 운영체제가 부모 프로세스에게 자식 프로세스의 종료를 알릴 수 있다면 더 효율적일 것입니다. #include void (*signal(int signo, void(*func)(int)))(int); // 시그널 발생시 호출되도록 이전에 등록한 함수의 포인터 반환 위 함수를 시그널 등록 함수라고 표현하는데요, 프로세스가 자식 프로세스의 종료 발생 시 특정 함수의 호출을 운영체제에게 요구하는 "시그널 등록"을 하기 때문입니다. 위 함수를 정리하면 다음과 같습니다. 함수 이름: signal 매개변수 선언: int signo, void(*func)(int) 반환형 : 매개변수형이 int..
프로세스가 할 일을 다 하고도 사라지지 않고 리소스를 차지하고 있는 모습을 가리켜 좀비 프로세스라고 합니다. fork() 함수의 호출로 생성된 프로세스를 종료하는 방법은 인자를 전달하면서 exit를 호출하거나, main 함수에서 return문을 실행하면서 값을 반환하는 경우가 있습니다. exit의 인자 값, return의 반환 값 모두 운영체제로 전달되고, 운영체제는 이 값이 부모 프로세스에게 전달될 때까지 자식 프로세스를 소멸시키지 않는데, 이 상황의 프로세스를 좀비 프로세스라 칭합니다. 따라서 자식 프로세스가 종료되며 나온 반환값이나 인자값이 부모 프로세스에게 전달되어야 좀비 프로세스를 없앨 수 있습니다. 부모 프로세스가 자식 프로세스의 전달 값을 요청하는 방법은 두 가지가 있습니다. 먼저 wait ..
프로세스의 현재 상태를 확인하는 방법은 Process Status의 약자인 ps 명령어를 사용합니다. 그냥 ps만 입력하면 다음과 같이 PID, TTY, TIME, CMD를 출력합니다. PID TTY TIME CMD 211 pts/4 00:00:00 bash 685 pts/4 00:00:00 ps 그리고 ps [옵션] 꼴으로 옵션을 사용할 수 있습니다. 대쉬(-)가 붙거나 붙지 않는 옵션들이 있는데, 이는 Unix98, BSD, GNU 모두 사용법이 다른 옵션들이 있습니다. Unix98에서는 대쉬(-), BSD에서는 대쉬를 사용하지 않고 GNU에서는 대쉬 2개(--)를 사용합니다. 먼저 이 시리즈에서 자주 사용하는 "ps au" 명령어의 a와 u는 다음과 같습니다. a : 현재 터미널의 사용자 고유 프로..
푸더기
'프로세스' 태그의 글 목록