Документация Python неофициальный перевод

select.md

384 строк · 34.9 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.13/library/select.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `select` – Ожидание завершения ввода-вывода89---1011Этот модуль предоставляет доступ к функциям `select()` и `poll()`, доступным в большинстве операционных систем, `devpoll()` – на Solaris и производных, `epoll()` – на Linux 2.5+ и `kqueue()` – на большинстве BSD. Обратите внимание: в Windows он работает только с сокетами; в других ОС он также работает с другими типами файлов (в частности, в Unix – с каналами). Его нельзя использовать для обычных файлов, чтобы определить, увеличился ли файл с момента последнего чтения.1213> **Примечание**14>15> Модуль [`selectors`](https://python-all.ru/3.13/library/selectors.html#module-selectors) предоставляет высокоуровневую и эффективную мультиплексацию ввода-вывода, построенную на примитивах модуля `select`. Пользователям рекомендуется использовать модуль `selectors`, если только им не требуется точный контроль над используемыми низкоуровневыми примитивами ОС.1617[Доступность](https://python-all.ru/3.13/library/intro.html#availability): не WASI.1819Этот модуль не работает или недоступен на WebAssembly. Подробнее см. [платформы WebAssembly](https://python-all.ru/3.13/library/intro.html#wasm-availability).2021Модуль определяет следующее:2223#### `exception select.error`2425Устаревший псевдоним [`OSError`](https://python-all.ru/3.13/library/exceptions.html#OSError).2627Изменено в версии 3.3: В соответствии с [**PEP 3151**](https://python-all.ru/3.13/library/select.html) этот класс стал псевдонимом [`OSError`](https://python-all.ru/3.13/library/exceptions.html#OSError).2829#### `select.devpoll()`3031Возвращает объект `/dev/poll` опроса; см. раздел [Объекты опроса /dev/poll](https://python-all.ru/3.13/library/select.html#devpoll-objects) ниже для получения информации о методах, поддерживаемых объектами devpoll.3233Объекты `devpoll()` привязаны к количеству файловых дескрипторов, разрешённых на момент создания. Если программа уменьшает это значение, `devpoll()` завершится ошибкой. Если программа увеличивает это значение, `devpoll()` может вернуть неполный список активных файловых дескрипторов.3435Новый файловый дескриптор является [ненаследуемым](https://python-all.ru/3.13/library/os.html#fd-inheritance).3637Добавлено в версии 3.3.3839Изменено в версии 3.4: Новый файловый дескриптор теперь не наследуется.4041[Доступность](https://python-all.ru/3.13/library/intro.html#availability): Solaris.4243#### `select.epoll(sizehint=-1, flags=0)`4445Возвращает объект опроса по фронту, который можно использовать как интерфейс с триггером по фронту или уровню для событий ввода-вывода.4647Параметр *sizehint* сообщает epoll ожидаемое количество регистрируемых событий. Он должен быть положительным, либо `-1` для использования значения по умолчанию. Он используется только в старых системах, где `epoll_create1()` недоступен; в противном случае он не имеет эффекта (хотя его значение по-прежнему проверяется).4849Параметр *flags* устарел и полностью игнорируется. Однако, если он указан, его значение должно быть `0` или `select.EPOLL_CLOEXEC`, иначе возбуждается `OSError`.5051См. раздел [Объекты опроса с триггером по фронту и уровню (epoll)](https://python-all.ru/3.13/library/select.html#epoll-objects) ниже для получения информации о методах, поддерживаемых объектами epoll.5253Объекты `epoll` поддерживают протокол менеджера контекста: при использовании в инструкции [`with`](https://python-all.ru/3.13/reference/compound_stmts.html#with) новый файловый дескриптор автоматически закрывается в конце блока.5455Новый файловый дескриптор является [ненаследуемым](https://python-all.ru/3.13/library/os.html#fd-inheritance).5657Изменено в версии 3.3: Добавлен параметр *flags*.5859Изменено в версии 3.4: Добавлена поддержка инструкции [`with`](https://python-all.ru/3.13/reference/compound_stmts.html#with). Теперь новый файловый дескриптор является ненаследуемым.6061Устарело с версии 3.4: Параметр *flags*. Теперь по умолчанию используется `select.EPOLL_CLOEXEC`. Используйте [`os.set_inheritable()`](https://python-all.ru/3.13/library/os.html#os.set_inheritable), чтобы сделать файловый дескриптор наследуемым.6263[Доступность](https://python-all.ru/3.13/library/intro.html#availability): Linux \>= 2.5.44.6465#### `select.poll()`6667Возвращает объект опроса, который поддерживает регистрацию и отмену регистрации файловых дескрипторов, а затем их опрос на предмет событий ввода-вывода; см. раздел [Объекты опроса](https://python-all.ru/3.13/library/select.html#poll-objects) ниже для получения информации о методах, поддерживаемых объектами опроса.6869[Доступность](https://python-all.ru/3.13/library/intro.html#availability): Unix.7071#### `select.kqueue()`7273Возвращает объект очереди ядра; см. раздел [Объекты Kqueue](https://python-all.ru/3.13/library/select.html#kqueue-objects) ниже для получения информации о методах, поддерживаемых объектами kqueue.7475Новый файловый дескриптор является [ненаследуемым](https://python-all.ru/3.13/library/os.html#fd-inheritance).7677Изменено в версии 3.4: Новый файловый дескриптор теперь не наследуется.7879[Доступность](https://python-all.ru/3.13/library/intro.html#availability): BSD, macOS.8081#### `select.kevent(ident, filter=KQ_FILTER_READ, flags=KQ_EV_ADD, fflags=0, data=0, udata=0)`8283Возвращает объект события ядра; см. раздел [Объекты Kevent](https://python-all.ru/3.13/library/select.html#kevent-objects) ниже для получения информации о методах, поддерживаемых объектами kevent.8485[Доступность](https://python-all.ru/3.13/library/intro.html#availability): BSD, macOS.8687#### `select.select(rlist, wlist, xlist, timeout=None)`8889Это простой интерфейс к системному вызову `select()` Unix. Первые три аргумента – это итерируемые объекты «ожидаемых объектов»: целые числа, представляющие файловые дескрипторы, или объекты с методом без параметров с именем [`fileno()`](https://python-all.ru/3.13/library/io.html#io.IOBase.fileno), возвращающим такое целое число:9091- *rlist*: ожидать готовности к чтению92- *wlist*: ожидать готовности к записи93- *xlist*: ожидать «исключительного условия» (см. справочную страницу для того, что ваша система считает таким условием)9495Пустые итерируемые объекты допускаются, но принятие трех пустых итерируемых объектов зависит от платформы. (Известно, что работает в Unix, но не в Windows.) Необязательный аргумент *timeout* задает тайм-аут как число с плавающей запятой в секундах. Когда аргумент *timeout* опущен или равен `None`, функция блокируется, пока хотя бы один файловый дескриптор не будет готов. Значение тайм-аута, равное нулю, задает опрос и никогда не блокирует.9697Возвращаемое значение – тройка списков готовых объектов: подмножества первых трех аргументов. Когда тайм-аут истекает без готовности файлового дескриптора, возвращаются три пустых списка.9899Среди допустимых типов объектов в итерируемых – [файловые объекты](https://python-all.ru/3.13/glossary.html#term-file-object) Python (например, `sys.stdin` или объекты, возвращаемые [`open()`](https://python-all.ru/3.13/library/functions.html#open) или [`os.popen()`](https://python-all.ru/3.13/library/os.html#os.popen)), сокетные объекты, возвращаемые [`socket.socket()`](https://python-all.ru/3.13/library/socket.html#socket.socket). Вы также можете самостоятельно определить *класс-обёртку*, если он имеет подходящий метод [`fileno()`](https://python-all.ru/3.13/library/io.html#io.IOBase.fileno) (который действительно возвращает файловый дескриптор, а не случайное целое число).100101> **Примечание**102>103> Файловые объекты в Windows недопустимы, но сокеты – да. В Windows базовая функция `select()` предоставляется библиотекой WinSock и не обрабатывает файловые дескрипторы, не происходящие из WinSock.104105Изменено в версии 3.5: Функция теперь повторяется с пересчитанным тайм-аутом при прерывании сигналом, за исключением случая, когда обработчик сигнала вызывает исключение (см. [**PEP 475**](https://python-all.ru/3.13/library/select.html) для обоснования), вместо вызова [`InterruptedError`](https://python-all.ru/3.13/library/exceptions.html#InterruptedError).106107#### `select.PIPE_BUF`108109Минимальное количество байтов, которое можно записать без блокировки в канал, когда канал был сообщен как готовый к записи с помощью [`select()`](https://python-all.ru/3.13/library/select.html#select.select), `poll()` или другого интерфейса в этом модуле. Это не относится к другим видам файлоподобных объектов, таким как сокеты.110111Это значение гарантируется POSIX равным не менее 512.112113[Доступность](https://python-all.ru/3.13/library/intro.html#availability): Unix114115Добавлено в версии 3.2.116117## `/dev/poll` объекты опроса118119Solaris и его производные имеют `/dev/poll`. В то время как `select()` является *O*(*наибольший файловый дескриптор*) и `poll()` является *O*(*количество файловых дескрипторов*), `/dev/poll` является *O*(*активные файловые дескрипторы*).120121Поведение `/dev/poll` очень близко к стандартному объекту `poll()`.122123#### `devpoll.close()`124125Закрывает файловый дескриптор объекта опроса.126127Добавлено в версии 3.4.128129#### `devpoll.closed`130131`True` если объект опроса закрыт.132133Добавлено в версии 3.4.134135#### `devpoll.fileno()`136137Возвращает номер файлового дескриптора объекта опроса.138139Добавлено в версии 3.4.140141#### `devpoll.register(fd[, eventmask])`142143Регистрирует файловый дескриптор в объекте опроса. Последующие вызовы метода [`poll()`](https://python-all.ru/3.13/library/select.html#select.poll) будут проверять, есть ли у файлового дескриптора ожидающие события ввода-вывода. *fd* может быть целым числом или объектом с методом [`fileno()`](https://python-all.ru/3.13/library/io.html#io.IOBase.fileno), возвращающим целое число. Файловые объекты реализуют `fileno()`, поэтому их тоже можно использовать в качестве аргумента.144145*eventmask* – необязательная битовая маска, описывающая тип событий, которые требуется проверять. Константы те же, что и для объекта `poll()`. Значение по умолчанию представляет собой комбинацию констант `POLLIN`, `POLLPRI` и `POLLOUT`.146147> **Предупреждение**148>149> Регистрация уже зарегистрированного файлового дескриптора не является ошибкой, но результат не определен. Правильным действием будет сначала отменить регистрацию или изменить его. Это важное отличие от `poll()`.150151#### `devpoll.modify(fd[, eventmask])`152153Этот метод выполняет [`unregister()`](https://python-all.ru/3.13/library/select.html#select.devpoll.unregister) с последующим [`register()`](https://python-all.ru/3.13/library/select.html#select.devpoll.register). Он (немного) эффективнее, чем делать то же самое явно.154155#### `devpoll.unregister(fd)`156157Удаляет файловый дескриптор, отслеживаемый объектом опроса. Как и метод [`register()`](https://python-all.ru/3.13/library/select.html#select.devpoll.register), *fd* может быть целым числом или объектом с методом [`fileno()`](https://python-all.ru/3.13/library/io.html#io.IOBase.fileno), возвращающим целое число.158159Попытка удалить файловый дескриптор, который никогда не был зарегистрирован, безопасно игнорируется.160161#### `devpoll.poll([timeout])`162163Опрашивает набор зарегистрированных файловых дескрипторов и возвращает возможно пустой список, содержащий кортежи из двух элементов `(fd, event)` для дескрипторов, у которых есть события или ошибки. *fd* – это файловый дескриптор, а *event* – битовая маска с установленными битами для сообщенных событий этого дескриптора: `POLLIN` – ожидание ввода, `POLLOUT` – указывает, что в дескриптор можно писать, и так далее. Пустой список означает, что вызов завершился по тайм-ауту и ни у одного файлового дескриптора не было событий. Если указан *timeout*, он задает время в миллисекундах, в течение которого система будет ждать событий перед возвратом. Если *timeout* опущен, равен -1 или [`None`](https://python-all.ru/3.13/library/constants.html#None), вызов будет блокироваться до появления события для этого объекта poll.164165Изменено в версии 3.5: Функция теперь повторяется с пересчитанным тайм-аутом при прерывании сигналом, за исключением случая, когда обработчик сигнала вызывает исключение (см. [**PEP 475**](https://python-all.ru/3.13/library/select.html) для обоснования), вместо вызова [`InterruptedError`](https://python-all.ru/3.13/library/exceptions.html#InterruptedError).166167## Объекты опроса с триггерами по переднему и уровневому фронту (epoll)168169> [https://linux.die.net/man/4/epoll](https://python-all.ru/3.13/library/select.html)170>171> *eventmask* – это битовая маска, использующая следующие константы:172>173> | Константа | Значение |174> | --- | --- |175> | `EPOLLIN` | Доступен для чтения. |176> | `EPOLLOUT` | Доступен для записи. |177> | `EPOLLPRI` | Срочные данные для чтения. |178> | `EPOLLERR` | На связанном fd произошла ошибка. |179> | `EPOLLHUP` | На связанном fd произошел разрыв соединения. |180> | `EPOLLET` | Устанавливает поведение триггера по переднему фронту; по умолчанию – поведение триггера по уровню. |181> | `EPOLLONESHOT` | Устанавливает однократное поведение. После извлечения одного события файловый дескриптор внутренне отключается. |182> | `EPOLLEXCLUSIVE` | Пробуждает только один объект epoll при событии на связанном fd. По умолчанию (если этот флаг не установлен) пробуждаются все объекты epoll, ожидающие на этом fd. |183> | `EPOLLRDHUP` | Потоковый сокет: удаленная сторона закрыла соединение или завершила записывающую половину соединения. |184> | `EPOLLRDNORM` | Эквивалентно `EPOLLIN` |185> | `EPOLLRDBAND` | Полоса приоритетных данных доступна для чтения. |186> | `EPOLLWRNORM` | Эквивалентно `EPOLLOUT`. |187> | `EPOLLWRBAND` | Приоритетные данные могут быть записаны. |188> | `EPOLLMSG` | Игнорируется. |189>190> Добавлено в версии 3.6: `EPOLLEXCLUSIVE` был добавлен. Поддерживается только ядром Linux 4.5 и новее.191192#### `epoll.close()`193194Закрывает управляющий файловый дескриптор объекта epoll.195196#### `epoll.closed`197198`True`, если объект epoll закрыт.199200#### `epoll.fileno()`201202Возвращает номер файлового дескриптора управляющего fd.203204#### `epoll.fromfd(fd)`205206Создает объект epoll из заданного файлового дескриптора.207208#### `epoll.register(fd[, eventmask])`209210Регистрирует файловый дескриптор *fd* в объекте epoll.211212#### `epoll.modify(fd, eventmask)`213214Изменяет зарегистрированный файловый дескриптор *fd*.215216#### `epoll.unregister(fd)`217218Удаляет зарегистрированный файловый дескриптор из объекта epoll.219220Изменено в версии 3.9: Метод больше не игнорирует ошибку [`EBADF`](https://python-all.ru/3.13/library/errno.html#errno.EBADF).221222#### `epoll.poll(timeout=None, maxevents=-1)`223224Ожидает события. timeout в секундах (float)225226Изменено в версии 3.5: Функция теперь повторяется с пересчитанным тайм-аутом при прерывании сигналом, за исключением случая, когда обработчик сигнала вызывает исключение (см. [**PEP 475**](https://python-all.ru/3.13/library/select.html) для обоснования), вместо вызова [`InterruptedError`](https://python-all.ru/3.13/library/exceptions.html#InterruptedError).227228## Объекты опроса (polling)229230Системный вызов `poll()`, поддерживаемый в большинстве Unix-систем, обеспечивает лучшую масштабируемость для сетевых серверов, обслуживающих одновременно множество клиентов. `poll()` масштабируется лучше, поскольку системный вызов требует только перечисления интересующих файловых дескрипторов, тогда как `select()` строит битовую маску, устанавливает биты для интересующих fd, а затем всю битовую маску нужно снова линейно сканировать. `select()` имеет сложность *O*(*наибольший файловый дескриптор*), тогда как `poll()`*O*(*количество файловых дескрипторов*).231232#### `poll.register(fd[, eventmask])`233234Регистрирует файловый дескриптор в объекте опроса. Последующие вызовы метода [`poll()`](https://python-all.ru/3.13/library/select.html#select.poll) будут проверять, есть ли у файлового дескриптора ожидающие события ввода-вывода. *fd* может быть целым числом или объектом с методом [`fileno()`](https://python-all.ru/3.13/library/io.html#io.IOBase.fileno), возвращающим целое число. Файловые объекты реализуют `fileno()`, поэтому их тоже можно использовать в качестве аргумента.235236*eventmask* – необязательная битовая маска, описывающая типы событий для проверки. Может быть комбинацией констант `POLLIN`, `POLLPRI` и `POLLOUT`, описанных в таблице ниже. Если не указана, по умолчанию проверяются все три типа событий.237238| Константа | Значение |239| --- | --- |240| `POLLIN` | Есть данные для чтения. |241| `POLLPRI` | Есть срочные данные для чтения. |242| `POLLOUT` | Готов к выводу: запись не будет блокироваться. |243| `POLLERR` | Ошибка какого-либо рода. |244| `POLLHUP` | Разъединение. |245| `POLLRDHUP` | Удаленный сокет потока закрыл соединение или завершил запись на своей стороне. |246| `POLLNVAL` | Недопустимый запрос: дескриптор не открыт. |247248Регистрация уже зарегистрированного файлового дескриптора не является ошибкой и имеет тот же эффект, как если бы дескриптор был зарегистрирован ровно один раз.249250#### `poll.modify(fd, eventmask)`251252Изменяет уже зарегистрированный fd. Это имеет тот же эффект, что и `register(fd, eventmask)`. Попытка изменить файловый дескриптор, который никогда не был зарегистрирован, приводит к возбуждению исключения [`OSError`](https://python-all.ru/3.13/library/exceptions.html#OSError) с errno `ENOENT`.253254#### `poll.unregister(fd)`255256Удаляет файловый дескриптор, отслеживаемый объектом опроса. Как и метод [`register()`](https://python-all.ru/3.13/library/select.html#select.poll.register), *fd* может быть целым числом или объектом с методом [`fileno()`](https://python-all.ru/3.13/library/io.html#io.IOBase.fileno), возвращающим целое число.257258Попытка удалить файловый дескриптор, который никогда не был зарегистрирован, приводит к возбуждению исключения [`KeyError`](https://python-all.ru/3.13/library/exceptions.html#KeyError).259260#### `poll.poll([timeout])`261262Опрашивает набор зарегистрированных файловых дескрипторов и возвращает, возможно, пустой список, содержащий `(fd, event)` кортежи из двух элементов для дескрипторов, по которым есть события или ошибки. *fd* – файловый дескриптор, а *event* – битовая маска с установленными битами для сообщаемых событий этого дескриптора: `POLLIN` для ожидания ввода, `POLLOUT` для указания, что в дескриптор можно писать, и так далее. Пустой список означает, что вызов завершился по таймауту и ни у одного файлового дескриптора не было событий. Если указан *timeout*, он задает время ожидания в миллисекундах, в течение которого система будет ожидать события перед возвратом. Если *timeout* опущен, отрицателен или равен [`None`](https://python-all.ru/3.13/library/constants.html#None), вызов будет блокироваться до появления события для этого объекта опроса.263264Изменено в версии 3.5: Функция теперь повторяется с пересчитанным тайм-аутом при прерывании сигналом, за исключением случая, когда обработчик сигнала вызывает исключение (см. [**PEP 475**](https://python-all.ru/3.13/library/select.html) для обоснования), вместо вызова [`InterruptedError`](https://python-all.ru/3.13/library/exceptions.html#InterruptedError).265266## Объекты Kqueue267268#### `kqueue.close()`269270Закрывает файловый дескриптор управления объекта kqueue.271272#### `kqueue.closed`273274`True`, если объект kqueue закрыт.275276#### `kqueue.fileno()`277278Возвращает номер файлового дескриптора управляющего fd.279280#### `kqueue.fromfd(fd)`281282Создаёт объект kqueue из заданного файлового дескриптора.283284#### `kqueue.control(changelist, max_events[, timeout]) → eventlist`285286Низкоуровневый интерфейс к kevent287288- changelist должен быть итерируемым объектом, содержащим объекты kevent, или `None`289- max\_events должен быть 0 или положительным целым числом290- тайм-аут в секундах (можно использовать числа с плавающей точкой); по умолчанию `None`, что означает бесконечное ожидание291292Изменено в версии 3.5: Функция теперь повторяется с пересчитанным тайм-аутом при прерывании сигналом, за исключением случая, когда обработчик сигнала вызывает исключение (см. [**PEP 475**](https://python-all.ru/3.13/library/select.html) для обоснования), вместо вызова [`InterruptedError`](https://python-all.ru/3.13/library/exceptions.html#InterruptedError).293294## Объекты kevent295296[https://man.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2](https://python-all.ru/3.13/library/select.html)297298#### `kevent.ident`299300Значение, используемое для идентификации события. Интерпретация зависит от фильтра, но обычно это файловый дескриптор. В конструкторе ident может быть либо целым числом, либо объектом с методом [`fileno()`](https://python-all.ru/3.13/library/io.html#io.IOBase.fileno). kevent хранит целое число внутри.301302#### `kevent.filter`303304Имя фильтра ядра.305306| Константа | Значение |307| --- | --- |308| `KQ_FILTER_READ` | Принимает дескриптор и возвращает результат, когда doступны данные для чтения. |309| `KQ_FILTER_WRITE` | Принимает дескриптор и возвращает результат, когда doступны данные для записи. |310| `KQ_FILTER_AIO` | Запросы AIO. |311| `KQ_FILTER_VNODE` | Возвращает результат, когда происходит одно или несколько запрошенных событий, отслеживаемых в *fflag*. |312| `KQ_FILTER_PROC` | Отслеживает события для идентификатора процесса. |313| `KQ_FILTER_NETDEV` | Отслеживает события на сетевом устройстве (недоступно в macOS). |314| `KQ_FILTER_SIGNAL` | Возвращает результат, когда отслеживаемый сигнал doставляется процессу. |315| `KQ_FILTER_TIMER` | Устанавливает произвольный таймер. |316317#### `kevent.flags`318319Действие фильтра.320321| Константа | Значение |322| --- | --- |323| `KQ_EV_ADD` | Добавляет или изменяет событие. |324| `KQ_EV_DELETE` | Удаляет событие из очереди. |325| `KQ_EV_ENABLE` | Разрешает control() возвращать событие. |326| `KQ_EV_DISABLE` | Отключает событие. |327| `KQ_EV_ONESHOT` | Удаляет событие после первого срабатывания. |328| `KQ_EV_CLEAR` | Сбрасывает состояние после извлечения события. |329| `KQ_EV_SYSFLAGS` | Внутреннее событие. |330| `KQ_EV_FLAG1` | Внутреннее событие. |331| `KQ_EV_EOF` | Специфическое для фильтра условие EOF. |332| `KQ_EV_ERROR` | Смотрите возвращаемые значения. |333334#### `kevent.fflags`335336Специфические для фильтра флаги.337338`KQ_FILTER_READ` и `KQ_FILTER_WRITE` флаги фильтра:339340| Константа | Значение |341| --- | --- |342| `KQ_NOTE_LOWAT` | Нижний водяной знак буфера сокета. |343344`KQ_FILTER_VNODE` флаги фильтра:345346| Константа | Значение |347| --- | --- |348| `KQ_NOTE_DELETE` | Была вызвана функция *unlink()*. |349| `KQ_NOTE_WRITE` | Произошла запись. |350| `KQ_NOTE_EXTEND` | Файл был расширен. |351| `KQ_NOTE_ATTRIB` | Был изменён атрибут. |352| `KQ_NOTE_LINK` | Количество ссылок изменилось. |353| `KQ_NOTE_RENAME` | Файл был переименован. |354| `KQ_NOTE_REVOKE` | Доступ к файлу был отозван. |355356`KQ_FILTER_PROC` флаги фильтра:357358| Константа | Значение |359| --- | --- |360| `KQ_NOTE_EXIT` | Процесс завершился. |361| `KQ_NOTE_FORK` | Процесс вызвал *fork()*. |362| `KQ_NOTE_EXEC` | Процесс запустил новый процесс. |363| `KQ_NOTE_PCTRLMASK` | Внутренний флаг фильтра. |364| `KQ_NOTE_PDATAMASK` | Внутренний флаг фильтра. |365| `KQ_NOTE_TRACK` | Отслеживает процесс после вызова *fork()*. |366| `KQ_NOTE_CHILD` | Возвращается для дочернего процесса для *NOTE\_TRACK*. |367| `KQ_NOTE_TRACKERR` | Не удалось присоединиться к дочернему процессу. |368369`KQ_FILTER_NETDEV` флаги фильтра (недоступны в macOS):370371| Константа | Значение |372| --- | --- |373| `KQ_NOTE_LINKUP` | Соединение активно. |374| `KQ_NOTE_LINKDOWN` | Соединение неактивно. |375| `KQ_NOTE_LINKINV` | Состояние соединения некорректно. |376377#### `kevent.data`378379Данные, специфичные для фильтра.380381#### `kevent.udata`382383Пользовательское значение.384