1.PID是进程标识号,它是一个进程的唯一性标识。PPID是该进程父进程的进程标识号。
2.fork和exec和pid完全就是2件事情不能混为一谈。fork是一个linux库函数。他是用来创建一个新的进程。至于exec是一个系列函数,C标准库函数,用来改变进程上下文的。2者结合使用可以创建一个新的进程。
3.如果创建新的进程,一般是用fork,他会返回这个被创建进程的PID,你可以通过PID找到这个进程。
使用fork创建一个新进程后,基于copy-on-write机制,不会立即将父进程的进程分布复制一份给子进程。而对于父进程在fork前所使用的资源,子进程继承了大部分,如父进程打开的文件描述符,还有部分没有继承。我觉得这个问题你应该从另外一个方向去考虑,既然B不需要A的资源,那么就不要在fork之前打开这些资源。你如,你原来的代码是
fd = open(...)
...
...
fork()
...
...
你现在就应该改成
fork()
if (parent)
{
......
fd = open()
.....
}
else
{
....
}
如果你是要在A进程打开资源,运行了一些东西,得到了足够的信息才需要调用其他啊程序来做下一步内容,如果按照上面的方法就无法实现了话,你面对的实际是进程间同步和通信的问题。 解决方法也很简单,随便通过一种通信机制(signal,pipe,等等),等A进程获得足够信息后,再通知B进程执行。比如
A:
fork()
/* below code are running in parent, A */
...
...
fd = open()
...
...
NOTIFY(B) /* use kill, send, etc. to notify child task B)
....
B:
WAIT()/* for example, while(1) sleep()*/
execlp(xxx)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)