Что такое процесс в операционной системе?

«Что такое процесс в операционной системе?» — вопрос из категории Linux и ОС, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Процесс — это экземпляр выполняемой программы, которому операционная система выделяет и управляет ресурсами. Это больше, чем просто код: это активная сущность со своим состоянием, включающая исполняемый код, данные, стек, регистры процессора, информацию об открытых файлах и другие ресурсы ОС.

Ключевые атрибуты процесса в Linux/Unix:

  • PID (Process ID): Уникальный числовой идентификатор.
  • Изолированное адресное пространство: Память одного процесса защищена от доступа другого процесса (если не используется разделяемая память).
  • Контекст выполнения: Состояние регистров CPU, указатель стека, состояние программы (выполняется, ожидает и т.д.).
  • Ресурсы: Открытые файловые дескрипторы, переменные окружения, права доступа (UID/GID).

Создание процесса в C/C++ (системный вызов fork()):

#include <unistd.h> // для fork()
#include <sys/wait.h> // для wait()
#include <iostream>

int main() {
    pid_t pid = fork(); // Создаёт почти полную копию родительского процесса

    if (pid == -1) {
        std::cerr << "Fork failed!" << std::endl;
        return 1;
    } else if (pid == 0) {
        // Код выполняется в ДОЧЕРНЕМ процессе
        std::cout << "Child process. My PID: " << getpid() << ", Parent PID: " << getppid() << std::endl;
        // Дочерний процесс может выполнить другую программу с помощью exec()
        // execlp("ls", "ls", "-l", nullptr);
    } else {
        // Код выполняется в РОДИТЕЛЬСКОМ процессе
        std::cout << "Parent process. My PID: " << getpid() << ", Child PID: " << pid << std::endl;
        int status;
        wait(&status); // Ожидание завершения дочернего процесса
        std::cout << "Child process finished." << std::endl;
    }
    return 0;
}

Процесс vs. Поток (Thread):

  • Процесс — тяжёлая, изолированная единица выполнения с собственной памятью. Создание и переключение контекста дорого.
  • Поток — лёгкая единица выполнения внутри процесса. Потоки одного процесса разделяют адресное пространство и ресурсы, что упрощает обмен данными, но требует синхронизации (мьютексы, семафоры).