ФлагОписание
CLONE_FILESРодительский и порожденный процессы совместно используют открытые файлы
CLONE_FSРодительский и порожденный процессы совместно используют информацию о файловой системе
CLONE_IDLETASKУстановить значение PID в нуль (используется только для холостых (idle) задач)
CLONE_NEWNSСоздать новое пространство имен для порожденной задачи
CLONE_PARENTРодительский процесс вызывающего процесса становится родительским и для порожденного
CLONE_PTRACEПродолжить трассировку и для порожденного процесса
CLONE_SETTIDВозвратить значение идентификатора TID в пространство пользователя
CLONE_SETTLSДля порожденного процесса создать новую область локальных данных потока (thread local storage, TLS)
CLONE_SIGHANDУ порожденного и родительского процессов будут общие обработчики сигналов
CLONE_SYSVSEMУ родительского и порожденного процессов будет общая семантика обработки флага SEM_UNDO для семафоров System V
CLONE_THREADРодительский и порожденный процессы будут принадлежать одной группе потоков
CLONE_VFORKИспользовать vfork: родительский процесс будет находиться а приостановленном состоянии, пока порожденный процесс не возобновит его работу
CLONE_UNTRACEDЗапретить родительскому процессу использование флага CLONE_PTRACE для порожденного процесса
CLONE_STOPЗапустить процесс в состоянии TASK_STOPPED
CLONE_CHILD_CLEARTIDОчистить идентификатор TID для порожденного процесса
CLONE_CHILD_SETTIDУстановить идентификатор TID для порожденного процесса
CLONE_PARENT_SETTIDУстановить идентификатор TID для родительского процесса
CLONE_VMУ порожденного и родительского процессов будет общее адресное пространство
<p>Потоки в пространстве ядра</p>

Часто в ядре полезно выполнить некоторые операции в фоновом режиме. В ядре такая возможность реализована с помощью потоков пространства ядра (kernel thread) — обычных процессов, которые выполняются исключительно в пространстве ядра. Наиболее существенным отличием между потоками пространства ядра и обычными процессами является то, что потоки в пространстве ядра не имеют адресного пространства (значение указателя mm для них равно NULL). Эти потоки работают только в пространстве ядра, и их контекст не переключается в пространство пользователя. Тем не менее потоки в пространстве ядра планируются и вытесняются так же, как и обычные процессы.

В ядре Linux потоки пространства ядра выполняют определенные задания, наиболее часто используемые, — это pdfush и ksoftirq. Эти потоки создаются при загрузке системы другими потоками пространства ядра. В действительности поток в пространстве ядра может быть создан только другим потоком, работающим в пространстве ядра. Интерфейс для запуска нового потока в пространстве ядра из уже существующего потока следующий:

int kernel_thread(int (*fn)(void*), void* arg, unsigned long flags);

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже