struct task_struct {//進程的運行時狀態volatilelong state; /* -1 unrunnable, 0 runnable, >0 stopped */void *stack; atomic_t usage;//進程當前的狀態/*0x00000002表示進程正在被創建;0x00000004表示進程正準備退出;0x00000040 表示此進程被fork出,但是并沒有執行exec;0x00000400表示此進程由于其他進程發送相關信號而被殺死 。*/unsignedint flags; /* per process flags, defined below */unsignedint ptrace;int on_rq;//表示此進程的運行優先級,prio表示動態優先級,根據static_prio和交互性獎罰算出,static_prio是進程的靜態優先級,在進程創建時確定,范圍從-20到19,越小優先級越高。int prio, static_prio, normal_prio;//進程的運行優先級unsignedint rt_priority;//list_head結構體struct list_head tasks;//mm_struct結構體,描述了進程內存的相關情況struct mm_struct *mm, *active_mm;/* per-thread vma caching */u32 vmacache_seqnum;struct vm_area_struct *vmacache[VMACACHE_SIZE];/* task state *///進程的狀態參數int exit_state;int exit_code, exit_signal;//父進程退出后信號被發送int pdeath_signal; /* The signal sent when the parent dies *//* scheduler bits, serialized by scheduler locks */unsigned sched_reset_on_fork:1;unsigned sched_contributes_to_load:1;unsigned sched_migrated:1;unsigned sched_remote_wakeup:1;unsigned :0; /* force alignment to the next boundary *//* unserialized, strictly 'current' */unsigned in_execve:1; /* bit to tell LSMs we're in execve */unsigned in_iowait:1;struct restart_block restart_block;//進程號pid_t pid;//進程組號pid_t tgid;//進程的親身父親struct task_struct __rcu *real_parent; /* real parent process *///進程的現在的父親,可能為繼父struct task_struct __rcu *parent; /* recipient of SIGCHLD, wait4() reports *///進程的孩子鏈表struct list_head children; /* list of my children *///進程兄弟的鏈表struct list_head sibling; /* linkage in my parent's children list *///主線程的進程描述符struct task_struct *group_leader; /* threadgroup leader *//* PID/PID hash table linkage. */struct pid_link pids[PIDTYPE_MAX];//該進程的所有線程鏈表struct list_head thread_group;struct list_head thread_node;//該進程使用cpu時間的信息,utime是在用戶態下執行的時間,stime是在內核態下執行的時間。cputime_t utime, stime;cputime_t gtime;struct prev_cputime prev_cputime;//啟動時間,,只是時間基準不一樣u64 start_time; /* monotonic time in nsec */u64 real_start_time; /* boot based time in nsec */struct task_cputime cputime_expires;//list_head的CPU時間struct list_head cpu_timers[3];//保存進程名字的數組,一般數組大小為15位char comm[TASK_COMM_LEN];/* file system info *///文件系統信息struct nameidata *nameidata;/* 文件系統信息計數*/int link_count, total_link_count;/* filesystem information *///文件系統相關信息結構體struct fs_struct *fs;/* open file information *///打開文件信息的結構體struct files_struct *files;/* namespaces */struct nsproxy *nsproxy;/* signal handlers *///信號相關信息的句柄struct signal_struct *signal;struct sighand_struct *sighand;struct callback_head *task_works;struct audit_context *audit_context;struct seccomp seccomp;/* Thread group tracking */u32 parent_exec_id;u32 self_exec_id;/* journalling filesystem info */void *journal_info;/* VM state */struct reclaim_state *reclaim_state;struct backing_dev_info *backing_dev_info;struct io_context *io_context;unsignedlong ptrace_message;siginfo_t *last_siginfo; /* For ptrace use. *//** time slack values; these are used to round up poll() and* select() etc timeout values. These are in nanoseconds.*///松弛時間值,用來記錄select和poll的超時時間,單位為nsu64 timer_slack_ns;u64 default_timer_slack_ns;/* CPU-specific state of this task *///該進程在特定CPU下的狀態struct thread_struct thread;};