Meine Aufgabe erfordert, dass ich das Prinzip der Prozessbehandlung kapsle.Encapsulation of Process führt zu unerwartetem Verhalten
Hier ist, was meine Klasse Process enthält:
class Process
{
public:
Process();
~Process();
pid_t getPid() const;
private:
pid_t pid_;
};
Constructor:
Process::Process()
{
this->pid_ = fork();
}
Destructor:
Process::~Process()
{
if (this->pid_ > 0)
kill(this->pid_, SIGKILL);
}
Hier ist das Problem: Nach dem Einkapseln und die Schaffung eines Objekts wie solche:
void example()
{
Process pro;
if (pro.pid_ == 0)
{
// Child Process
}
else if (pro.pid_ < 0)
{
// Error
}
else
{
// Parent Process
}
}
Mein Programm fast nie den Code eingibt, aber wenn ich fork()
normalerweise (ohne Kapselung) funktioniert es wie ein Charme.
Wo bin ich falsch gelaufen? Wie kann ich das Kind und die Eltern synchronisieren, um sicherzustellen, dass beide ihre Arbeit machen?
Dieser Code möglicherweise nicht zusammenstellen können. 'pid_' ist eine private Variable, auf die von example() nicht zugegriffen werden kann. Bitte poste nicht imaginären Code, sondern stattdessen [mcve]. Andernfalls wird Ihre Frage abgelehnt und geschlossen. –