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 시그널을 보낸다.
- 자식 프로세스의 종료를 확인하고, 종료 신호를 받은 부모 프로세스는 해당 핸들러를 실행하여 종료 코드를 처리하고 표시한다.
- 유닉스에는 미리 정의된 특수 목적 신호가 있고 사용자가 정의하는 신호도 있다. 이를 통해 프로세스가 서로 특정 목적 또는 응용 프로그램 내에서 통신할 수 있다.
- 사용자들은 신호 코드를 정의하여 애플리케이션 프로그램 내에서 서로 통신할 수 있게 하며, 이는 이벤트 기반 방식으로 작동하게끔 할 수 있다.
'코딩 도구 > 운영체제' 카테고리의 다른 글
프로세스 간 통신과 시그널 처리 (7) | 2024.04.07 |
---|---|
시그널링을 사용하여 프로세스 간 통신을 하는 방법 (2) | 2024.04.06 |
IPC: pipe2.c (13) | 2024.04.05 |
IPC: pipe1.c (15) | 2024.04.05 |
IPC tutorials : signal1.c 및 signal2.c (14) | 2024.04.04 |