当前位置: 技术问答>linux和unix
高手请进,如何完备的获得进程间父子关系,谢谢!
来源: 互联网 发布时间:2016-11-09
本文导语: RT 想获得进程间父子关系,目前有两条思路: 1. 通过新创建的子进程调用exec时,获得该进程本身的PID 2. 通过父进程调用fork时,获得函数返回的子进程号 如果1,则可能漏掉父进程只fork子进程,子进程不exec执行新...
RT
想获得进程间父子关系,目前有两条思路:
1. 通过新创建的子进程调用exec时,获得该进程本身的PID
2. 通过父进程调用fork时,获得函数返回的子进程号
如果1,则可能漏掉父进程只fork子进程,子进程不exec执行新程序的情况
如果2,则可能在创建kernel thread的时候也获得,这是不希望出现的
请问各位,该如何获得?
多谢!!!
想获得进程间父子关系,目前有两条思路:
1. 通过新创建的子进程调用exec时,获得该进程本身的PID
2. 通过父进程调用fork时,获得函数返回的子进程号
如果1,则可能漏掉父进程只fork子进程,子进程不exec执行新程序的情况
如果2,则可能在创建kernel thread的时候也获得,这是不希望出现的
请问各位,该如何获得?
多谢!!!
|
这不是Windows,exec不会创建新的进程,在内核认为,那只不过是把原来的进程空间换上了新的代码而已,甚至描述符也不会改变,根本不是什么子进程,就是原进程本身。就像是先读入代码,再调用了这个函数一样。
pthread的实现就是依靠多进程,因为原生的Unix是完全不支持多线程的。早期的多线程是用多进程模拟的,后来为了更快、更好地共享内存,才把这种模拟行为移动到了内核代码中的。这种“假进程”可以用pthread的API进行判断。
其实你从主进程init(PID=1,因为PID=0被内核用了)开始,枚举进程关系即可。有个API,getppid()。
pthread的实现就是依靠多进程,因为原生的Unix是完全不支持多线程的。早期的多线程是用多进程模拟的,后来为了更快、更好地共享内存,才把这种模拟行为移动到了内核代码中的。这种“假进程”可以用pthread的API进行判断。
其实你从主进程init(PID=1,因为PID=0被内核用了)开始,枚举进程关系即可。有个API,getppid()。
|
是谁要获取?
子进程?父进程?
子进程?父进程?