inter-process communication (IPC)
Imagine two people in separate sealed offices who need to work together. They cannot just walk over and look at each other's desk — the walls are solid. So they invent ways to cooperate anyway: a note slipped under the door, a shared whiteboard in a corridor they both can reach, a doorbell to get attention. Separate processes on a computer are in exactly this situation. Each process has its own private memory, walled off by the operating system, so one process simply cannot read another's variables. Inter-process communication, or IPC, is the whole family of mechanisms the system gives them to cooperate despite those walls.
Because the kernel deliberately isolates each process's address space (one process writing to address 0x1000 sees nothing of another process's address 0x1000), every IPC mechanism is something the kernel mediates or arranges. The mechanisms fall into three broad styles. Data transfer means copying bytes from one process to another — pipes, FIFOs, message queues, and sockets all do this; the receiver gets its own copy. Shared memory means the kernel maps the same physical pages into two processes so they can both read and write the same bytes with no copying — fast, but it forces you to add your own synchronization. Signaling means sending a small, content-free nudge — a signal that says 'something happened' without carrying data. Most real programs combine several of these.
IPC matters because real systems are built from many cooperating processes, not one giant program: a shell launching commands, a web server handing work to worker processes, a database serving many clients. Choosing the right IPC mechanism is an engineering decision about speed, direction (one-way or two-way), whether the parties are related, and how much data moves. The honest caveat: IPC is only for communication between processes on the same machine. The moment the parties live on different computers you are doing networking instead, which is a separate field — though, confusingly, the same socket API spans both.
When you type ls | sort the shell wires two separate processes together with a pipe (data transfer). Pressing Ctrl-C to stop them sends a signal (signaling). A database might map a shared-memory region for many clients (shared memory). Three styles, three jobs.
The three IPC styles in one breath: copy bytes, share bytes, or just nudge.
IPC presumes the processes are isolated — that is the whole reason it exists. Threads inside one process already share memory and so do NOT need IPC; they need in-process synchronization instead, which is a different topic.