본문 바로가기

컴퓨터 전공 공부/운영체제

프로세스 간 통신과 시그널 처리

반응형

프로세스 간 통신과 시그널 처리

프로그램 대기 및 실행 흐름 확인 방법?


CNRS 트리를 살펴보면, 한번에 두 번 실행해야 하는 경우가 있어요.
이때는 종료 신호를 두 조각으로 나눌 수 있어요.
시그널 넘버 쓰리의 소스 코드를 보면, sig int 대신에 term에 핸들러를 등록한 것을 알 수 있어요.
이것은 종료를 위한 신호인데, 핸들러를 등록하고 많은 함수가 스캐너로 이동하고 정수가 올 때까지 기다리는 방식이에요.
사용자로부터 명령이 올 때까지 프로그램이 대기하도록 하는 것이죠.

시그널 핸들링의 기능은 무엇인가요?


시그널이 발생하면 핸들러 기능에서 작업을 생성할지 물어봐요.
프로세스 목록을 나열하고, 시그널을 받는 것을 확인할 수 있죠.
시그널을 받으면 작업 종료 여부를 물을 수 있고, 사용자가 종료하지 않기로 선택하면 프로그램이 계속 실행돼요.
다른 프로세스가 종료 시그널을 보낼 때, 사용자 정의 핸들러로 시그널을 처리하여 응답을 제어할 수 있어요.
상황에 따라 프로그램 실행을 계속할 수 있으며, 종료 시그널을 다른 프로그램의 메시지로 간주할 수 있어요.

프로세스 종료 및 신호 처리 방법은?


조심해야 할 사항에 대해 프로세스 종료를 기다려도 돼요.
현재 진행 중인 작업이 끝나면 처리하거나 즉각 종료할 수 있어요.
편집한 주문 정보를 텍스트 파일에 저장하고 종료하거나 신호를 무시할 수 있어요.
결정은 사용자에게 달려 있고, 어플리케이션에 달려 있죠.
프로그램 계속 진행 중이며 'kill'에 대해 설명하며, 'kill'은 프로그램을 항상 종료하는 게 아니라 다른 프로그램에 신호를 전송하며, 다른 신호를 전달할 수 있어요.
프로그램을 즉각 종료하려면 'kill -9'를 사용해요.
이는 강제 종료 신호이며 운영 체제가 직접 처리하므로 응용 프로그램에서 권한이 없어요.
SIGKILL은 응용 프로그램에 의해 무시할 수 없는 종료 신호이며 운영 체제가 직접 프로세스를 종료해요.

🖥️애플리케이션 안전히 종료하는 방법?


애플리케이션이 올바르게 작동하고 있고 작업을 완료할 핸들러가 있다면, 모든 데이터를 저장하거나 사용자와 상호작용을 위해 몇 초 정도 더 소모될 거예요.
윈도우의 컴퓨터 시스템을 종료하면, 각 애플리케이션이 종료 신호를 보내고, 사용 중이라는 경고를 표시해 결과물 저장 여부를 물어볼 거예요.
일부 애플리케이션은 자동으로 종료되지 않을 수 있어 운영체제가 강제로 종료할 수도 있지만, 어떤 프로세스에도 킬 신호를 보내지 않는 문제가 있어요.

프로세스 간 킬 권한과 예제


사용자는 일반적으로 다른 사용자 프로세스를 중단시킬 수 없지만, 상위 권한을 가진 사용자는 가능해요.
부모 프로세스는 자식 프로세스를 중단시킬 수 있고, 슈퍼유저 권한으로 생성된 다른 사용자의 프로세스를 중단시킬 수 있어요.
그리고 어떤 프로세스든지 중단할 수 있어요.

부모-자식 프로세스의 시그널 상호작용


메인 함수에서 첫 번째로 시그널을 등록하는데, 자식 프로세스가 종료될 때 발생하는 시그널을 중요하게 살펴봐.
부모 프로세스가 자식 프로세스의 종료를 기다리는 대신 다른 작업을 수행하도록 허용하여 처리 효율성을 높여.
자식 프로세스 종료 시 부모 프로세스에게 정보 전달 및 처리 상태 전달을 가능케 하는 시그널 핸들러를 통해 상호 작용의 효율성을 높여.
시그널 핸들러를 통해 자식 프로세스의 실행을 기다림과 동시에 부모 프로세스가 일하는 동안 처리를 지속하도록 해 주는 방식으로 프로그램을 효율적으로 구성해.

포트 통제와 무한 루프 작업의 과정은?


자식에게 PID가 제공되는 포크 호출 기본 모습을 설명하죠.
자식 값이 양수, 즉 0이 아닌 값이면 부모를 위한 10 블록으로 이동해요.
값이 0이면 else 블록으로 이동해요.
자식 프로세스는 무한 루프를 진행하며, 부모 프로세스는 3초 대기 후 kill API를 호출해 자식 프로세스를 종료시키는 거죠.
C term을 사용해 자식 프로세스를 종료시키고, 부모 프로세스는 무한 루프에 진입하죠.

신호 처리의 핵심?


부모 프로세스와 자식 프로세스가 생성되고, 부모 프로세스는 3초 후 자식 프로세스를 종료하는 kill 시그널을 보내요.
자식 프로세스의 종료를 확인하고, 종료 신호를 받은 부모 프로세스는 해당 핸들러를 실행하여 종료 코드를 처리하고 표시해요.
유닉스에는 미리 정의된 특수 목적 신호가 있고 사용자가 정의하는 신호도 있어요.
사용자들은 신호 코드를 정의하여 애플리케이션 프로그램 내에서 서로 통신할 수 있게 하며, 이는 이벤트 기반 방식으로 작동하게끔 할 수 있어요.
 
 

이 글 자세한 필기 정리본

https://mkisos.tistory.com/entry/%EC%8B%9C%EA%B7%B8%EB%84%90%EB%A7%81%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EA%B0%84-%ED%86%B5%EC%8B%A0%EC%9D%84-%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95#google_vignette

 

반응형