C语言在linux怎么让子进程不继承父进程的资源

已举报 回答 关注
C语言在linux怎么让子进程不继承父进程的资源
问在线客服
扫码问在线客服
  • 回答数

    5

  • 浏览数

    7,991

5个回答 默认排序
  • 默认排序
  • 按时间排序

已采纳
我觉得这个问题你应该从另外一个方向去考虑,既然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);
取消 评论
有更简单的方法,不用fork派生,直接用系统调用启动新的进程,至于需要继承的资源,考虑用写文件的方式进行过继
取消 评论
exec函数族。
取消 评论
子进程调用kill函数可以向父进程发送信号
取消 评论
#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(int argc,char **argv)
{
pid_t pid;
int i = 0;
int j = 0;
//get time
time_t current;
time(¤t);
//make a child process
pid = fork();
for(i = 0; i < 5; i++)
{
if(pid < 0)
{
perror("fork failed!");
exit(1);
}
if(pid == 0)
{
printf("Current time:\n");
sleep(3);
printf("\n");
}
else
{
for(j = 0; j < 3; j++)
{
printf("%s",ctime(¤t));
sleep(1);
}
}
}
if(pid == 0) wait();
return 0;
}
取消 评论
ZOL问答 > C语言在linux怎么让子进程不继承父进程的资源

举报

感谢您为社区的和谐贡献力量请选择举报类型

举报成功

经过核实后将会做出处理
感谢您为社区和谐做出贡献

扫码参与新品0元试用
晒单、顶楼豪礼等你拿

扫一扫,关注我们
提示

确定要取消此次报名,退出该活动?