IPC: signal3.c 및 signal4.c

2024. 4. 4. 23:22컴퓨터 전공 공부/운영체제

반응형

signal3.c 및 signal4.c

https://www.youtube.com/watch?v=SDGDTNo3cUs

프로세스 간 통신과 시그널 처리에 관한 내용을 다루는 영상 요입니다.
부모 프로세스와 자식 프로세스 간의 통신을 설명하며, 시그널을 이용한 프로세스 제어 방법에 대해 다룹니다.
특히, 프로세스 간 통신을 통해 어떻게 프로세스의 동작을 제어하고 종료할 수 있는지에 대해 상세히 설명하고 있습니다.
또한, 다양한 시그널의 활용 방법과 프로세스 간 권한에 대한 내용도 다루고 있습니다.


1.시그널 핸들러를 통한 프로그램 대기 및 실행 흐름 확인


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

 

  • 전체적인 문맥으로 볼 때, 'CNRS'는 프로세스 간 통신 및 시그널 처리 예제에서 중요한 개념이라는 것을 알 수 있습니다. 영상에서 CNRS tree라는 예제를 확인하는 과정에서 사용되며, 부모 프로세스와 자식 프로세스 간의 통신과 프로세스 제어에 관련된 내용을 다루고 있습니다. 이에 따라 'CNRS'는 프로세스 간 통신 및 시그널 처리 과정에서의 중요한 요소로 사용된 것으로 파악됩니다. 
  • 핸들러는 특정 이벤트가 발생했을 때 그에 대응하는 처리를 담당하는 프로그램의 일부를 말합니다.
  • 전체적인 문맥으로 볼 때, 이 내용은 부모 프로세스와 자식 프로세스 간의 통신에서 사용되는 시그널을 처리하는 데 필요한 부분으로 이해될 수 있습니다. 핸들러는 특히 시그널을 수신하고 해당 이벤트에 대한 적절한 처리를 수행하는 기능을 담당합니다.

2.시그널 핸들링과 사용자 정의 핸들러 기능 설명


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

3.프로세스 종료 및 신호 처리 방법


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

 

  • 전체적인 문맥으로 볼 때, 이 내용은 프로세스 간 통신 시그널 처리에 관한 영상에서, 주문 정보를 저장한 후 프로세스를 종료하는 방법에 대한 설명과 관련 있습니다.
  • 영상에서 언급된 내용에서 주문 정보를 텍스트 파일에 저장한 후 프로세스를 종료할 수 있는 방법이 설명되고 있으며, 이는 프로세스 간 통신을 통해 다른 프로그램에 시그널을 보내어 프로세스를 제어하는 방법 중 하나로 이해될 수 있습니다.


4.️애플리케이션 작동 중, 안전하게 종료하는 방법과 문제점


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

5.프로세스 간 킬 신호 권한과 동작에 대한 예제


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

6.️시그널 등록 및 처리: 부모 프로세스와 자식 프로세스 간 상호 작용


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

7.️포크를 이용해 자식 프로세스를 종료시키고 무한 루프


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

 

  • PID란 '프로세스 식별자(Process Identifier)'를 의미합니다.
  • 이 문맥에서는, 부모 프로세스와 자식 프로세스 간의 관계를 구별하기 위해 사용되었습니다.
  • 전체적인 문맥으로 볼 때, 이 내용은 프로세스 간의 통신과 제어를 설명하는 중요한 개념으로 이해될 수 있습니다.
  • 부모 프로세스는 자식 프로세스의 PID를 획득하여, 특정 시그널을 보내거나 원하는 작업을 수행할 수 있습니다.
  • 따라서, PID는 프로세스를 구분하고 식별하기 위한 중요한 요소로 사용됩니다.
  • 이 키워드는 '블록'이라는 단어로, 일반적으로는 코드 또는 프로그램에서 특정한 기능을 수행하거나 특정한 조건을 만족할 때 실행되는 일련의 코드 묶음을 의미합니다.
  • 전체적인 문맥으로 볼 때, 이 내용은 코드에서 조건문(if-else)을 의미하며, 부모 프로세스가 자식 프로세스를 제어할 때 일어나는 특정 조건을 나타내는 블록을 의미할 수 있습니다.
  • 이 블록은 부모 프로세스가 특정 시그널을 보내어 자식 프로세스를 종료하는 등의 동작을 수행하는 과정에서 중요한 역할을 할 것으로 보입니다.그렇기 때문에 블록은 프로세스 간 통신에 있어 중요하게 사용되는 용어로 보입니다.
  • 포크 호출은 자식 프로세스를 생성하기 위해 사용되는 시스템 호출 중 하나입니다.
  • 전체적인 문맥으로 볼 때, 영상에서 포크 호출은 프로세스 간 통신과 시그널 처리에 관한 내용에서 중요한 역할을 합니다.
  • 포크 호출은 부모 프로세스가 자식 프로세스를 생성할 때 사용되며, 포크 호출의 결과로 새로운 프로세스가 생성되어 부모 프로세스와 독립적으로 실행됩니다.
  • 이때, 포크 호출을 통해 생성된 자식 프로세스는 기존 부모 프로세스의 상태를 그대로 복사하게 되는데, 이러한 프로세스 간 상속과 관련하여 영상에서 상세한 설명이 이루어졌을 것으로 예상됩니다.
  • 따라서, 포크 호출은 프로세스 간 통신 및 제어에 핵심적으로 활용되며, 자식 프로세스의 생성 및 제어에 사용된다고 할 수 있습니다.



8.프로세스간 통신과 신호 처리에 대한 설명


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


반응형