Способы передачи данных в/из процесс/а проще разбить по этапам его жизни:
-
Создан (Forking): Процесс создаётся с помощью системного вызова
fork()
.- Способы передать данные на этом этапе:
- Аргументы и флаги: Передаются процессу при создании.
- Переменные окружения: Наследуются от родительского процесса.
- Способы передать данные на этом этапе:
-
Выполняется (Executing): После создания процесс начинает выполняться, часто используя системный вызов
exec()
для запуска программы.- Способы передать данные на этом этапе:
- Сигналы: Процессы могут отправлять и получать сигналы.
- Дескрипторы файлов: через них реализована работа с файлами, в т.ч. с каналами (FIFO и пр.) и сокетами. См. По-простому про потоки ввода-вывода и перенаправления, а также По-сложному (и по-честному!) про потоки ввода-вывода и перенаправления
- Способы передать данные на этом этапе:
-
Остановлен (Stopped): Выполняющийся процесс может быть временно остановлен сигналами, такими как
SIGSTOP
.- Взаимодействие с процессом на этом этапе:
- Сигналы: Остановленный процесс может быть возобновлен сигналами, такими как
SIGCONT
.
- Сигналы: Остановленный процесс может быть возобновлен сигналами, такими как
- Взаимодействие с процессом на этом этапе:
-
Зомби (Termination): Когда процесс завершает выполнение, он становится зомби-процессом до тех пор, пока его родительский процесс не прочитает его статус завершения.
- Взаимодействие на этом этапе:
- Код возврата: Родительскому процессу передаётся код возврата — это такое целое число, которое указывает как завершился процесс (успешно или с ошибками).
- Взаимодействие на этом этапе:
-
Завершен (Terminated): Процесс полностью завершается и удаляется из таблицы процессов после того, как родительский процесс прочитает его код возврата, обычно используя
wait()
.