Что происходит, когда у меня следующая ситуация:
класс A: удерживает динамически размещенные объекты B.Он создаст и уничтожит их.
класс B: имеет функцию execute, вызванную A. Execute выполнит fork (), и дочерний процесс будет использовать execvp для запуска другого процесса.НО, можно установить флаг, чтобы родитель не ожидал ребенка (позволяет ему работать в фоновом режиме).
Мой вопрос: что делает в этом случае fork?Я знаю, что у ребенка есть полная копия процесса родителя, но я немного растерялся.Значит ли это, что дочерний процесс имеет свой собственный объект A, который содержит B?И что произойдет, если B не ждет, но A удаляет B?
Вот пример кода.Обратите внимание, что это упрощено от того, что я на самом деле делаю.
class B;
class A
{
public:
void addAction( const std::string &name )
{
_bq.push( new B( name ) );
}
void doActions( bool wait = true )
{
while ( !_bq.empty() )
{
B* b = _bq.front();
b->execute( wait );
_bq.pop();
delete b;
}
}
~A() { //omitted, but just deletes everything in queue }
private:
std::queue<B*> _bq;
};
class B
{
public:
B( const std::string &name )
{
args.push_back( name.c_str() );
args.push_back( NULL );
}
void execute( bool waitForChild )
{
pid_t pid = fork();
if ( pid != 0 )
{
if (waitForChild)
{
int status;
wait( &status );
// check status...
}
}
else
{
execvp( args[0], const_cast<char**>( &args[0] ) );
// problem
exit( 100 );
}
}
private:
std::vector<char*> args;
};