在Linux上,对于多进程,子进程继承了父进程的哪些

在Linux上,对于多进程,子进程继承了父进程的哪些,第1张

不知道你是不是学习编程的,如果不是就没必要看了。

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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7982704.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存