进程学习杂项汇总

1. 进程状态描述,即 task_struct 的 state 成员取值

// include/linux/sched.h
/* Per process flags */
#define PF_IDLE            0x00000002    /* 我是一个空闲线程*/ /* I am an IDLE thread */
#define PF_EXITING        0x00000004    /* 关机 */ /* Getting shut down */
#define PF_EXITPIDONE    0x00000008    /* 关闭时PI退出完成 */ /* PI exit done on shut down */
#define PF_VCPU            0x00000010    /* 我是一个虚拟CPU */ /* I'm a virtual CPU */
#define PF_WQ_WORKER    0x00000020    /* 我是工作队列工作者 */ /* I'm a workqueue worker */
#define PF_FORKNOEXEC    0x00000040    /* Forked了但是还没有执行 */ /* Forked but didn't exec */
#define PF_MCE_PROCESS    0x00000080  /* 关于mce错误的处理策略 */ /* Process policy on mce errors */
#define PF_SUPERPRIV    0x00000100    /* 使用的超级用户特权 */ /* Used super-user privileges */
#define PF_DUMPCORE        0x00000200    /* 转储核心 */ /* Dumped core */
#define PF_SIGNALED        0x00000400    /* 被信号杀死 */ /* Killed by a signal */
#define PF_MEMALLOC        0x00000800    /* 分配内存 */ /* Allocating memory */
#define PF_NPROC_EXCEEDED    0x00001000    /* set_user()注意到已超过 RLIMIT_NPROC */ /* set_user() noticed that RLIMIT_NPROC was exceeded */
#define PF_USED_MATH        0x00002000    /* 如果未设置,则必须在使用前初始化fpu */ /* If unset the fpu must be initialized before use */
#define PF_USED_ASYNC        0x00004000    /* 使用async_schedule(),由模块初始化使用 */ /* Used async_schedule*(), used by module init */
#define PF_NOFREEZE            0x00008000    /* 此线程不应被冻结 */ /* This thread should not be frozen */
#define PF_FROZEN            0x00010000    /* 系统suspend冻结 */ /* Frozen for system suspend */
#define PF_KSWAPD            0x00020000    /* 我是kswapd */ /* I am kswapd */
#define PF_MEMALLOC_NOFS    0x00040000    /* 所有分配请求将继承 GFP_NOFS */ /* All allocation requests will inherit GFP_NOFS */
#define PF_MEMALLOC_NOIO    0x00080000    /* 所有分配请求将继承 GFP_NOIO */ /* All allocation requests will inherit GFP_NOIO */
#define PF_LESS_THROTTLE    0x00100000    /* 减少对我的限制:我清理内存 */ /* Throttle me less: I clean memory */
#define PF_KTHREAD            0x00200000    /* 我是内核线程 */ /* I am a kernel thread */
#define PF_RANDOMIZE        0x00400000    /* 随机化虚拟地址空间 */ /* Randomize virtual address space */
#define PF_SWAPWRITE        0x00800000    /* 允许写入交换 */ /* Allowed to write to swap */
#define PF_NO_SETAFFINITY    0x04000000    /* 不允许用户区与cpus_allowed */ /* Userland is not allowed to meddle with cpus_allowed */
#define PF_MCE_EARLY        0x08000000  /* 早期终止mce进程策略 */ /* Early kill for mce process policy */
#define PF_MUTEX_TESTER        0x20000000    /* 线程属于rt互斥测试器 */ /* Thread belongs to the rt mutex tester */
#define PF_FREEZER_SKIP        0x40000000    /* 冻结器不应将其视为可冻结 */ /*/ *冰箱不应将其视为可冻结* /*/
#define PF_SUSPEND_TASK        0x80000000  /* 这个是调用 freeze_processes()的线程,不应冻结 */ /* This thread called freeze_processes() and should not be frozen */

 注:

(1). kthread_bind --> __kthread_bind --> __kthread_bind_mask --> p->flags |= PF_NO_SETAFFINITY; 也即内核中调用 kthread_bind() 绑定过的内核线程不允许用户空间设置亲和性了。

 

2. 营造高负载环境

#include <unistd.h>

void main()
{
    fork();
    fork();
    fork();
    while(1);
}

会创建8个while(1)死循环。

 

3. pidof可以查看一个进程组所有的PID

# pidof sh
5585 5618 5650 5681 5707 5938 7622 8441

 

4. htop可以查看进程在哪些CPU上运行以及负载

# htop 22534
  1  [#########################################100.0%]
  2  [#########################################100.0%]
  3  [#########################################100.0%]
  4  [#########################################100.0%]
  5  [#########################################100.0%]
  6  [#########################################100.0%]
  7  [#########################################100.0%]
  8  [#########################################100.0%]

22534是任务组(8个任务)中的一个任务的PID

 

posted on 2021-01-01 23:18  Hello-World3  阅读(543)  评论(0编辑  收藏  举报

导航