• 石维康
    2019-04-24
    文中说“如果在 bash 上使用 GDB 来 debug 一个进程,这个时候 GDB 是 real_parent,bash 是这个进程的 parent。”
    根据copy_process里对PT_PTRACED标志位处理的流程来看,应该是 bash 是 real_parent,GDB 是这个进程的 parent 吧?

    作者回复: 谢谢,果真弄反了

     1
     30
  • 逍觉迷遥
    2019-04-24
    ①这节内容解决了关于上节task_struct为什么要用链表结构,是为了维护多个task之间的关系。一个task节点的parent指针指向其父进程task,children指针指向子进程所有task的头部,然后又靠 sibling指针来维护统一级兄弟task!
     
    ②setUid是一个权限的特殊标志位,带有这个标志位可以对文件执行等同root的权限!比如,Linux下修改密码的指令passwd,我们ls去查看时发现其权限就有s标志,这个就是之所以能修改密码的原因。如果去掉这个权限,再以普通用户身份去修改密码则会提示没有权限!这个例子和老师的玩游戏可以说是异曲同工,但它更具有普遍性,大家也更熟悉!

    ③capabilities听了感觉云里雾里还是一知半解,老师着重讲了概念,但还是不知道怎么用???希望老师结合实际使用例子讲一下就更好了!!!
    展开

    作者回复: capabilities在容器那一节会用到

    
     19
  • why
    2019-04-24
    - 运行统计信息, 包含用户/内核态运行时间; 上/下文切换次数; 启动时间等;
    - 进程亲缘关系
        - 拥有同一父进程的所有进程具有兄弟关系
        - 包含: 指向 parent; 指向 real_parent; 子进程双向链表头结点; 兄弟进程双向链表头结点
        - parent 指向的父进程接收进程结束信号
        - real_parent 和 parent 通常一样; 但在 bash 中用 GDB 调试程序时, GDB 是 real_parent, bash 是 parent
    - 进程权限, 包含 real_cred 指针(谁能操作我); cred 指针(我能操作谁)
        - cred 结构体中标明多组用户和用户组 id
        - uid/gid(哪个用户的进程启动我)
        - euid/egid(按照哪个用户审核权限, 操作消息队列, 共享内存等)
        - fsuid/fsgid(文件操作时审核)
        - 这三组 id 一般一样
        - 通过 chmod u+s program, 给程序设置 set-user-id 标识位, 运行时程序将进程 euid/fsuid 改为程序文件所有者 id
        - suid/sgid 可以用来保存 id, 进程可以通过 setuid 更改 uid
        - capability 机制, 以细粒度赋予普通用户部分高权限 (capability.h 列出了权限)
            - cap_permitted 表示进程的权限
            - cap_effective 实际起作用的权限, cap_permitted 范围可大于 cap_effective
            - cap_inheritable 若权限可被继承, 在 exec 执行时继承的权限集合, 并加入 cap_permitted 中(但非 root 用户不会保留 cap_inheritable 集合)
            - cap_bset 所有进程保留的权限(限制只用一次的功能)
            - cap_ambient exec 时, 并入 cap_permitted 和 cap_effective 中
    - 内存管理: mm_struct
    - 文件与文件系统: 打开的文件, 文件系统相关数据结构
    展开
     1
     14
  • garlic
    2019-07-03
    进程的相关信息可以通过ps 获取, 依赖关系通过pstree获取,文件相关通过lsof, fuser,capabilities相关通过capsh,getcap获取, 学习笔记https://garlicspace.com/2019/07/03/获取进程信息相关命令/

    作者回复: 赞

    
     9
  • WL
    2019-04-30
    请问一下老师这句代码中的, __rcu是什么意思? 起到的作用是啥? 在网上好像没搜到.
    const struct cred __rcu *real_cred;

    作者回复: RCU(Read-Copy Update),是 Linux 中比较重要的一种同步机制。顾名思义就是“读,拷贝更新”,再直白点是“随意读,但更新数据的时候,需要先复制一份副本,在副本上完成修改,再一次性地替换旧数据”。这是 Linux 内核实现的一种针对“读多写少”的共享数据的同步机制。

    
     9
  • manatee
    2019-04-24
    通过/proc/pid/status可以看到进程的所属的各种id

    作者回复: 建议大家多看/proc/pid下的相关信息

    
     5
  • wumin
    2019-05-21
    作业能给出具体的命令吗?

    作者回复: 其实一搜就能搜索到的

     1
     4
  • 辉煌码农
    2019-09-20
    进程亲缘关系的图超赞
    
     1
  • Paul Shan
    2019-12-25
    ps -o pid,euid,ruid,suid,egid,rgid,sgid,cmd 可以查看到不少进程数据
    
    
  • 拯救地球好累
    2019-12-09
    请问下老师,调度相关信息和信号处理相关信息如何用命令行来查看
    
    
  • 陈志恒
    2019-11-25
    如果task的数据结构就是为了打印出来看我觉得还是比较容易的,关键还是要站在linux创造的角度,理解为什么要这样设计数据结构,这需要对整个linux系统进行整体的学习和分析,继续加油,多看两遍!
    
    
  • 柳长青
    2019-10-30
    老师,我的系统RHEL7,进入/proc/$pid里头,有很多文件包括:status,stat,attr....,但是具体是跟你表格中的内容怎么对映呢?你表格中的信息只在这个文件里面吗?
    
    
  • 天王
    2019-08-15
    进程的数据结构2,1 运行统计信息 task_struct里面有utime用户态消耗时间,stime内核态消耗时间,nvcsw自愿的上下文切换计数,nivcsw,非自愿的上下文切换计数,start_time进程启动时间,real_start_time真实的进程启动时间。2 进程的亲戚关系 real_parent和parent指向父进程,list_head children指向子进程,list_head sibling 指向兄弟进程 3 进程权限信息 3.1 用户和用户组权限 项目组权限,是指能访问哪些文件,访问文件夹,操作文件,被其他项目组访问,进程权限定义,struct cred _rcu *real_cred 谁能操作我,*cred 我能操作谁,cred 定义 大部分是用户和用户组所属的 第一个是uid和gid,real user/group id,谁启动的进程,就是谁的id,第二个是ueid和egid,effective有效的,这个进程操作消息队列,共享内存,信号量这些对象的时候是否有权限。第三个是fsuid和fsgid filesystem user/group id,对文件系统操作是否有权限,linux进程可以随时通过setuid设置用户id,改成创建进程的uid,就能操作了。创建进程的uid和gid会保存在一个地方,允许修改,那就是suid和sgid。3.2 capabilities 机制控制权限 用位图控制权限,3.21 cap_permitted,表示进程能使用的权限,cap_effective,是真正控制的权限,一个进程可以放弃一些权限 3.22 cap_inheritable 表示执行文件的可扩展属性设置了inheritable标志位时,调用exec执行该程序会继承调用者的inheritable集合,并将其加入permitted集合。只针对root用户 3.23 cap_bset capability bounding set ,系统中所有进程保留的权限,如果这个几个没有这个权限,所有进程都没有这个权限 3.24 cap_ambient非root用户使用exec执行程序的时候,cap_ambient会调价到cap_permitted和effective中,进程就有了这个程序的权限。4 内存管理数据结构mm_struct 5 文件系统数据结构 fs_struct和files_struct
    展开
    
    
  • 勤劳的小胖子-libo
    2019-05-12
    通过passwd来试验setUid很方便,谢谢一起学习的同志

    作者回复: 赞

    
    
  • LS
    2019-05-07
    由于 list_add(&subtask->sibling, &current->children); 文中的进程链表图是不是应该是 父进程的 children 指向的是 子进程的 sibling 而不是 子进程 task 结构体本身?

    作者回复: 指向task_struct,不过不用纠结呀,指向slibing也可以找到指向task_struct的指针,指向task_struct也可以找到指向sibling的指针

    
    
  • 青石
    2019-04-25
    请问老师,同一级的所有进程的sibling是指向同一块内存地址吗?

    作者回复: 不是啊,在一串链表上

    
    
  • tux
    2019-04-25
    时不时会用 htop和pidstat,进行辅助查看进程信息
    
    
  • kdb_reboot
    2019-04-25
    一个建议:最近几篇都在介绍概念,可否增加实际操作的案例

    作者回复: 一般前面是通过代码或者命令行进行实际操作,后面主要解析内核

    
    
  • 平少
    2019-04-24
    是使用strace -p 进程号 来获取进程的信息么
    
    
  • tiankonghewo
    2019-04-24
    学习了
    
    
我们在线,来聊聊吧