如notepad pid为1001
关掉notepad之后,这个1001有否可能再次被使用!
谢谢

解决方案 »

  1.   

    系统内出现相同的PID ???
      
    作者:陆麟 
    转载请征得作者同意. 
    2003.9.3--------------------------------------------------------------------------------
    一直以来, 我一直认为OS在系统范围内部维护PID/TID的清单. PID/CID不可能出现重复, 这也是很多KERNEL MODE UTILITY赖以实现的基础. 但是, 今天, 这条金科玉律被打破了. PID是可以重复的. 错误的观点来自与错误的流程理解. PROCESS在内核是以EPROCESS识别的. 进程创建时刻, PID/TID什么的均是不存在的. 其次, 进程结束, 并不意味着EPROCESS的销毁. EPROCESS销毁的时刻为所有的PROCESS HANDLE都关闭后. PID的来源是CSRSS, CSRSS负责分配PID/TID. 这下可糟糕了. 假定有一个进程, 创建了1个子进程. 然后字进程结束, 父进程没有关闭进程句柄. 这样一个流程会导致僵尸进程的存在, 而CSRSS并不知道EPROCESS的存在与否. 因此, 仍然按照自己的算法分配PID/TID. 这样, 同样的PID就可能出现在系统范围内部. 依赖与PID运作的代码可要仔细考虑一下流程是否有可能出现问题了.使我醒悟的只言片语, 来自NEWSGROUP, 虽然我没有参与那个THREAD, 但是人家的言语始终可能会有帮助. 发言的是Ivan Brugiolo, 来自MICROSOFT.
    The NtQuerySystemInformation call for system processes is not transacted with process creation. You can have a handle for the process signaled when it's dead, but the EPROCESS object has not been yet removed from the list kept in kernel mode. It would be removed when the last reference to the handle is closed. This can cause the so called 'zombie process' to staty around with some parent-pid or the same pid that has been reused. Since CLIENT_ID are allocated by  csrss.exe, this can happen.
      

  2.   

    louifox(兰陵笑笑生) 这篇文章只是说明的了进程ID是如何创建的是由谁创建的问题,但不能说明其他什么问题。不错当进程被结束后,它的ID就没有意义这时确实不代表此进程内核对象不会存在,但是,创建一个新进程时,如此进程ID与刚才结束的ID如一样时,调用OpenProcess指向的内核是不会一样的。其实在内核中,每个内核都是有唯一对象标识,当创建一个进程内核对象时,传入csrss进程中将会有这个内核唯一对象标识。