当前位置: 技术问答>linux和unix
关于多进程提问!
来源: 互联网 发布时间:2015-06-20
本文导语: //constructor Process::Process():o1(),o2(),o3(){} Process::Multi(){ pid_t pid1,pid2,pid3; pid1 = fork(); if( pid1 == 0 ) {o1.func(); } else if ( pid1 > 0 ) { pid2 = fork(); if( pid2 == 0 ) {o2.func(); } else if ( pid...
//constructor
Process::Process():o1(),o2(),o3(){}
Process::Multi(){
pid_t pid1,pid2,pid3;
pid1 = fork();
if( pid1 == 0 ) {o1.func(); }
else if ( pid1 > 0 ) {
pid2 = fork();
if( pid2 == 0 ) {o2.func(); }
else if ( pid2 > 0 ) {
pid3 = fork();
if( pid3 == 0 ) {o3.func(); }
else if ( pid3 > 0 ) {waitpid( -1, NULL, 0 );
}
}
问题1:
程序在开始时会调用一次构造函数,但在运行的时候会调用6次析构函数,而第一次调用结束的时候为什么其他程序还是可以正常的继续运行?为什么没有释放空间?
问题2:
我原以为上面这种写法会因为析构变量以后,程序还再继续使用而产生错误,所以将每个子进程中加入了exit(0),但结果很意外,加了以后反而造成了程序的不稳定!频繁出错!
请帮忙解释一下上面两个问题,谢谢!
Process::Process():o1(),o2(),o3(){}
Process::Multi(){
pid_t pid1,pid2,pid3;
pid1 = fork();
if( pid1 == 0 ) {o1.func(); }
else if ( pid1 > 0 ) {
pid2 = fork();
if( pid2 == 0 ) {o2.func(); }
else if ( pid2 > 0 ) {
pid3 = fork();
if( pid3 == 0 ) {o3.func(); }
else if ( pid3 > 0 ) {waitpid( -1, NULL, 0 );
}
}
问题1:
程序在开始时会调用一次构造函数,但在运行的时候会调用6次析构函数,而第一次调用结束的时候为什么其他程序还是可以正常的继续运行?为什么没有释放空间?
问题2:
我原以为上面这种写法会因为析构变量以后,程序还再继续使用而产生错误,所以将每个子进程中加入了exit(0),但结果很意外,加了以后反而造成了程序的不稳定!频繁出错!
请帮忙解释一下上面两个问题,谢谢!
|
把你的代码贴全