установки и считывания магнитной полярности кольца. Эти кольца назывались ядрами (cores), а все вместе — ядерной памятью. Поэтому дамп ядра — это копия состояния системной памяти в определенный момент времени.
28
В процессе работы system()
блокирует SIGCHILD
, что заставляет передавать этот сигнал программе непосредственно перед тем, как system()
вернет управление (но после того, как system()
вызовет wait()
для порожденного процесса), поэтому программы, которые используют обработчики сигналов, должны это учитывать и обрабатывать такие ложные сигналы осторожно. Функция system()
также игнорирует SIGINT
и SIGQUIT
, а это означает, что быстрые циклические повторные вызовы system()
может оказаться невозможно прервать ничем, кроме SIGSTOP
и SIGKILL
.
29
Хотя функция popen()
это делает просто, с ней связаны некоторые побочные эффекты, которые не сразу становятся очевидны. Она создает дочерний процесс, который может быть прерван перед тем, как будет вызвана pclose()
, что заставит функцию wait()
вернуть состояние процесса. Когда этот процесс завершится, он также сгенерирует SIGCHLD
, что может привести в замешательство упрощенно написанный обработчик сигналов.
30
Этот тип обработки часто приводит к взаимоблокировкам, при которых процесс А ожидает, пока процесс В выполнит какую-то работу, в то время как процесс В ожидает процесса А, в результате чего ничего не происходит.
31
Если вам понадобится делать это, запустите дочерний процесс с помощью fork()
и exec()
, а потом воспользуйтесь poll()
для чтения и записи в дочерний процесс. Для этого предназначена программа под названием expect
.
32
Информацию о чтении и записи в поток stdio
можно найти в [15].
33
В главе 15 все это проясняется, поэтому, возможно, будет полезно сначала прочитать ее.
34
Но, может быть, не сразу. Может существовать группа процессов, содержащая процессы, чьи родители относятся к другой группе в том же сеансе. Поскольку отношения 'родительский-дочерний' между процессами образуют дерево, иногда может оказаться, что существует группа процессов, которая содержит только те процессы, чьим родителем является оболочка, и когда такая группа процессов завершается, другая становится висячей.
35
Обсуждение станет более понятным после того, как вы прочитаете главы, посвященные сигналам (глава 12) и управлению заданиями (глава 15).
36
В среде Linux файловая система /proc
включает информацию о каждом файле, открытом в системе в данный момент. Хотя это значит, что неименованные каналы могут быть найдены в файловой системе, все же они не имеют постоянных имен, потому что исчезают при завершении процесса, использующего их.
37
Не все блочные устройства представляют реальное оборудование. Более правильное описание блочных устройств — это нечто, на чем может располагаться файловая система; блочное устройство обратной связи (loopback block device) отображает на обычный файл логическое блочное устройство, что позволяет файлам содержать в себе целые файловые системы.
38
Точнее говоря, они кэшируются и доступ к ним упорядочен.