Я прочитал этот пост о SIGKILL
и был озадачен следующими утверждениями:
только некоторые системные вызовы прерываются, поэтому ядро внутренне помечает процесс как в специальном «умирающем» состоянии до тех пор, пока системные вызовы или операции ввода-вывода не будут разрешены
...
После разрешения любых внутрипроцессных процедур ядра, состояние процесса изменяется с «умирающего» на «мертвое», и ядро начинает его очищать
Но я не могу найти подтверждения этому в исходных кодах ядра. Состояния задачи определены в linux / sched.h :
#define TASK_RUNNING 0x0000
#define TASK_INTERRUPTIBLE 0x0001
#define TASK_UNINTERRUPTIBLE 0x0002
#define __TASK_STOPPED 0x0004
#define __TASK_TRACED 0x0008
/* Used in tsk->exit_state: */
#define EXIT_DEAD 0x0010
#define EXIT_ZOMBIE 0x0020
#define EXIT_TRACE (EXIT_ZOMBIE | EXIT_DEAD)
/* Used in tsk->state again: */
#define TASK_PARKED 0x0040
#define TASK_DEAD 0x0080
#define TASK_WAKEKILL 0x0100
#define TASK_WAKING 0x0200
#define TASK_NOLOAD 0x0400
#define TASK_NEW 0x0800
#define TASK_STATE_MAX 0x1000
И нет никаких «умирающих» состояний ни в linux / sched.h, ни в других файлах планировщика. Может ли кто-нибудь уточнить, какое именно состояние задачи используется, чтобы пометить задачу как «умирающую» при непрерывном системном вызове?