C++ 流程处理的封装会产生问题

C++ 流程处理的封装会产生问题,c++,process,fork,C++,Process,Fork,我的任务要求我概括流程处理的原则 下面是我的过程类包含的内容: class Process { public: Process(); ~Process(); pid_t getPid() const; private: pid_t pid_; }; 建造商: Process::Process() { this->pid_ = fork(); } 析构函数: Process::~Process() { if (this->pid_ >

我的任务要求我概括流程处理的原则

下面是我的
过程
类包含的内容:

class Process
{
public:
  Process();
  ~Process();

  pid_t getPid() const;

private:
  pid_t         pid_;
};
建造商:

Process::Process()
{
  this->pid_ = fork();
}
析构函数:

Process::~Process()
{
  if (this->pid_ > 0)
    kill(this->pid_, SIGKILL);
}
问题是:在封装和创建这样的对象之后:

void    example()
{
  Process       pro;

  if (pro.pid_ == 0)
    {
      // Child Process                                                                                                      
    }
  else if (pro.pid_ < 0)
    {
      // Error                                                                                                         
    }
  else
    {
      // Parent Process                                                                                                     
    }
}
void示例()
{
过程亲;
如果(pro.pid==0)
{
//子进程
}
否则如果(专业pid<0)
{
//错误
}
其他的
{
//父进程
}
}
我的程序几乎从不输入子代码,但是当我正常地(没有封装)使用fork()
时,它就像一个符咒一样工作


我哪里出错了?

这听起来像是一个错误。在你的情况下,父母大部分时间似乎在孩子做你期望的事情之前就杀死了孩子。如果两个进程之间没有同步,任何执行顺序都是可能的。如果您希望孩子始终执行工作,则必须实现某种形式的同步。一种常见的黑客行为(即不是真正的同步)是在父级中进行
[sleep][2]()
ing。非常常见的是在父母中等待孩子的完成。

这听起来像是一个错误。在你的情况下,父母大部分时间似乎在孩子做你期望的事情之前就杀死了孩子。如果两个进程之间没有同步,任何执行顺序都是可能的。如果您希望孩子始终执行工作,则必须实现某种形式的同步。一种常见的黑客行为(即不是真正的同步)是在父级中进行
[sleep][2]()
ing。非常常见的是
[wait][2]()
在父母那里等待孩子的完成。

有趣!但是,除了睡眠或等待之外,还有没有其他方法会影响我的算法呢?谢谢您的回答。还有很多同步方法,一种同步方法是使用通信,例如管道、文件,另一种方法是使用专门用于同步的结构,例如信号量或等待。我对你的问题了解不够,无法选择最好的,我肯定会使用命名管道,因为作业中提到了它。非常感谢你的帮助。很有趣!但是,除了睡眠或等待之外,还有没有其他方法会影响我的算法呢?谢谢您的回答。还有很多同步方法,一种同步方法是使用通信,例如管道、文件,另一种方法是使用专门用于同步的结构,例如信号量或等待。我对你的问题了解不够,无法选择最好的,我肯定会使用命名管道,因为作业中提到了它。非常感谢你的帮助。