>  기사  >  운영 및 유지보수  >  Linux에서 프로세스 간 통신 방법은 무엇입니까?

Linux에서 프로세스 간 통신 방법은 무엇입니까?

王林
王林원래의
2020-06-29 13:16:397062검색

Linux 프로세스 간 통신 방법은 다음과 같습니다. 1. 파이프(익명 파이프 및 명명된 파이프 포함) 3. 메시지 대기열 5. 세마포 파이프의 본질은 커널 버퍼이며 프로세스는 파이프를 사용하여 정보를 전송합니다.

Linux에서 프로세스 간 통신 방법은 무엇입니까?

Linux 프로세스 간 통신 방법:

(권장 학습: linux 튜토리얼)

Linux 프로세스 간 기본 통신 방법에는 주로 파이프(익명 파이프 및 명명된 파이프 포함), 신호, 메시지가 포함됩니다. 큐, 공유 메모리, 세마포어 및 소켓.

다음 방법을 각각 소개합니다.

1. Pipeline

파이프의 본질은 이름과 마찬가지로 통신해야 하는 두 프로세스가 있습니다. 파이프의 끝 부분을 사용하여 정보를 전달합니다. 파이프의 양쪽 끝에 있는 프로세스의 경우 파이프는 파일이지만 이 파일은 파일 시스템에 속하지 않고 메모리에만 존재합니다.

2. 신호

신호는 소프트웨어 수준에서 인터럽트 메커니즘을 시뮬레이션한 것으로, 프로세스가 어떤 작업을 통해 신호가 도착할 때까지 기다릴 필요가 없습니다. 신호는 사용자 공간 프로세스와 커널 간에 직접 상호 작용할 수 있으며, 커널은 신호를 사용하여 어떤 시스템 이벤트가 발생했는지 사용자 공간 프로세스에 알릴 수 있습니다.

3. 메시지 대기열

메시지 대기열은 특정 형식의 메시지 연결 목록으로, 메모리에 저장되고 메시지 대기열 식별자로 식별되며 하나 이상의 프로세스에서 메시지를 쓰고 읽을 수 있습니다.

4. 공유 메모리

여러 프로세스가 동일한 메모리 공간을 직접 읽고 쓸 수 있도록 하며 다른 통신 메커니즘의 낮은 작동 효율성을 위해 설계되었습니다.

여러 프로세스 간에 정보를 교환하기 위해 커널은 액세스해야 하는 프로세스에 의해 자체 개인 주소 공간에 매핑될 수 있는 메모리 영역을 특별히 따로 설정합니다. 프로세스는 데이터를 복사하지 않고 이 메모리를 직접 읽고 쓸 수 있으므로 효율성이 크게 향상됩니다.

참고: 공유 메모리는 동기화 메커니즘을 제공하지 않습니다. 한 프로세스가 공유 메모리에 쓰기를 마치기 전에 다른 두 프로세스가 이를 읽기 시작하는 것을 방지하는 자동 메커니즘이 없습니다. 따라서 일반적으로 공유 메모리에 대한 액세스를 동기화하려면 다른 메커니즘을 사용해야 합니다.

5. 세마포

세마포는 기본적으로 사용 가능한 리소스 수를 식별하는 카운터이며 해당 값은 항상 음수가 아닌 정수입니다. 0과 1의 두 가지 값만 갖는 세마포어를 바이너리 세마포어(또는 바이너리 세마포어)라고 부르는데, 이는 특정 리소스가 사용 가능한지 여부를 식별하는 데 사용할 수 있습니다.

6. 소켓

소켓은 보다 기본적인 프로세스 간 통신 메커니즘입니다. 다른 방법과 달리 소켓은 서로 다른 시스템 간의 프로세스 간 통신에 사용될 수 있습니다.

소켓에는 파일 기반과 네트워크 지향의 두 가지 유형이 있습니다.

(1) Unix 소켓은 파일 기반이며 주소 계열인 UNIX를 나타내는 "계열 이름"인 AF_UNIX를 갖습니다.

(2) 두 번째 유형의 소켓은 네트워크를 기반으로 합니다. 또한 주소 계열을 나타내는 자체 계열 이름인 AF_INET이 있습니다. INTERNET

어떤 주소 계열을 사용하든 소켓 연결에는 두 가지 차이점이 있습니다. 연결 지향형과 비연결형.

(1) 연결 지향 소켓(SOCK_STREAM)

통신 전에 연결이 설정되어야 합니다. 연결 지향 통신은 레코드 경계 없이 직렬화되고 안정적이며 중복되지 않는 데이터 전달을 제공합니다.

이는 각 정보 조각이 여러 조각으로 분할될 수 있으며 각 조각이 목적지에 도달하여 정보가 다시 연결될 수 있음을 의미합니다.

이 연결 유형을 구현하는 주요 프로토콜은 TCP(전송 제어 프로토콜)입니다.

(2) 비연결 소켓(SOCK_DGRAM)

통신이 시작되기 전에 연결을 설정할 필요가 없으며, 데이터 전송 중에 연결의 순서, 신뢰성 또는 반복성을 보장할 수 없습니다.

그러나 데이터그램은 레코드 경계를 보존합니다. 즉, 메시지가 처음에 조각으로 나누어지지 않고 전체적으로 전송된다는 의미입니다.

연결 지향 소켓이 제공하는 보장으로 인해 가상 회로 연결 설정 및 유지 관리에는 상당한 오버헤드가 필요합니다. 그러나 데이터그램에는 이러한 오버헤드가 필요하지 않습니다. 즉, 데이터그램이 더 "저렴"합니다.

이 연결 유형을 구현하는 주요 프로토콜은 UDP(사용자 데이터그램 프로토콜)입니다.

위 내용은 Linux에서 프로세스 간 통신 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.