如果python程序启动后形成多个进程如何判断其关系
显示进程的树状结构。-cp 表示树展开,且显示进程号码
$pstree -cp
显示结果
│ │ │ ├─pycharm.sh(5146)───java(5194)─┬─fsnotifier64(5232)
│ │ │ │ ├─python2.7(5314)─┬─python2.7(5327)─┬─{python2.7}(5329)
│ │ │ │ │ │ ├─{python2.7}(5330)
│ │ │ │ │ │ ├─{python2.7}(5341)
│ │ │ │ │ │ └─{python2.7}(5344)
│ │ │ │ │ ├─python2.7(5328)─┬─{python2.7}(5339)
│ │ │ │ │ │ ├─{python2.7}(5340)
│ │ │ │ │ │ ├─{python2.7}(5354)
│ │ │ │ │ │ └─{python2.7}(5355)
│ │ │ │ │ ├─python2.7(5331)─┬─{python2.7}(5342)
│ │ │ │ │ │ ├─{python2.7}(5343)
│ │ │ │ │ │ ├─{python2.7}(5359)
│ │ │ │ │ │ └─{python2.7}(5360)
│ │ │ │ │ ├─python2.7(5332)─┬─{python2.7}(5346)
│ │ │ │ │ │ ├─{python2.7}(5347)
│ │ │ │ │ │ ├─{python2.7}(5364)
│ │ │ │ │ │ └─{python2.7}(5365)
│ │ │ │ │ ├─python2.7(5333)─┬─{python2.7}(5348)
│ │ │ │ │ │ ├─{python2.7}(5350)
│ │ │ │ │ │ ├─{python2.7}(5368)
│ │ │ │ │ │ └─{python2.7}(5369)
│ │ │ │ │ ├─python2.7(5334)─┬─{python2.7}(5356)
│ │ │ │ │ │ ├─{python2.7}(5358)
│ │ │ │ │ │ ├─{python2.7}(5376)
│ │ │ │ │ │ └─{python2.7}(5377)
│ │ │ │ │ ├─python2.7(5335)─┬─{python2.7}(5352)
│ │ │ │ │ │ ├─{python2.7}(5353)
│ │ │ │ │ │ ├─{python2.7}(5373)
│ │ │ │ │ │ └─{python2.7}(5375)
│ │ │ │ │ ├─python2.7(5336)─┬─{python2.7}(5362)
│ │ │ │ │ │ ├─{python2.7}(5363)
│ │ │ │ │ │ ├─{python2.7}(5378)
│ │ │ │ │ │ └─{python2.7}(5379)
│ │ │ │ │ ├─python2.7(5337)─┬─{python2.7}(5372)
│ │ │ │ │ │ ├─{python2.7}(5374)
│ │ │ │ │ │ ├─{python2.7}(5382)
│ │ │ │ │ │ └─{python2.7}(5383)
│ │ │ │ │ ├─python2.7(5338)─┬─{python2.7}(5366)
│ │ │ │ │ │ ├─{python2.7}(5370)
│ │ │ │ │ │ ├─{python2.7}(5380)
│ │ │ │ │ │ └─{python2.7}(5381)
│ │ │ │ │ ├─{python2.7}(5317)
│ │ │ │ │ ├─{python2.7}(5318)
│ │ │ │ │ └─{python2.7}(5319)
│ │ │ │ ├─{java}(5195)
从上面可以看到,python程序起了一个主进程5314,然后这个主进程又起了10个左右的子进程。再结合以下命令可以判断出启动的程序的组成主进程是那个,以及子进程是那个。
$ps aux|grep 程序名
$top -H -p N ###N是进程号
$cat /proc/N/status ###N是进程号
$cat /proc/5314/status
显示信息如下
Name: python2.7 ###进程名字 State: S (sleeping) ###进程状态 Tgid: 5314 ###进程线程组id(主线程),也就是进程id;每个进程有一个主线程,有其他线程;主线程id即进程id Ngid: 0 ### Pid: 5314 ###线程或者进程id(主线程),linux中线程进程是同一个数据结构 PPid: 5194 ###父进程id TracerPid: 0 ###跟踪当前进程的进程id,0表示无跟踪 Uid: 1000 1000 1000 1000 ###用户id Gid: 0 0 0 0 ###组id FDSize: 512 ###文件描述符上限,ls /proc/5314/fd;查看文件描述符 Groups: 0 4 24 27 30 46 108 124 127 ###用户组 VmPeak: 329196 kB ###进程运行占用内存的峰值 VmSize: 329192 kB ###目前占用内存量 VmLck: 0 kB ###进程锁住的内存,不能交换到磁盘 VmPin: 0 kB ### VmHWM: 45860 kB ###程序得到分配到物理内存的峰值 VmRSS: 45860 kB ###程序得到分配到物理内存 VmData: 259188 kB ###表示进程数据段的大小 VmStk: 136 kB ###表示进程堆栈段的大小 VmExe: 2800 kB ###表示进程代码的大小. VmLib: 6088 kB ###表示进程所使用LIB库的大小. VmPTE: 240 kB ###占用的页表的大小 VmSwap: 0 kB ###进程占用Swap交换区的大小 Threads: 4 ###进程下面的线程个数 SigQ: 0/64045 ###表示当前待处理信号的个数 SigPnd: 0000000000000000 ###屏蔽位,存储了该线程的待处理信号,等同于线程的PENDING信号. ShdPnd: 0000000000000000 ###屏蔽位,存储了该线程组的待处理信号.等同于进程组的PENDING信号. SigBlk: 0000000000000004 ###存放被阻塞的信号,等同于BLOCKED信号. SigIgn: 0000000001001000 ###存放被忽略的信号,等同于IGNORED信号. SigCgt: 0000000180004003 ###存放捕获的信号,等同于CAUGHT信号. CapInh: 0000000000000000 ###能够被当前进程执行的程序继承的能力. CapPrm: 0000000000000000 ###表示进程能够使用的能力 CapEff: 0000000000000000 ###当一个进程要进行某个特权操作时,操作系统会检查cap_effective的对应位是否有效,而不再是检查进程的有效UID是否为0. CapBnd: 0000003fffffffff ###是系统的边界能力,我们无法改变它. Seccomp: 0 ### Cpus_allowed: ffffffff ###该进程可以使用CPU的亲和性掩码,如果我们指定为两块CPU,这里就是3,如果该进程指定为4个CPU(如果有话),这里就是F(1111). Cpus_allowed_list: 0-31 ###进程可以使用的cpu的id号码列表 Mems_allowed: 00000000,00000001 ###内存资源 Mems_allowed_list: 0 ###内存资源 voluntary_ctxt_switches: 376135 ###进程主动切换的次数 nonvoluntary_ctxt_switches: 5992 ###进程被动切换的次数
原文:http://www.cnblogs.com/yasmi/p/5212378.html