过程处理的封装会产生问题

时间:2016-04-13 13:19:08

标签: c++ process fork

我的任务要求我封装过程处理原则。

以下是我的Process类包含的内容:

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                                                                                                     
    }
}

我的程序几乎从不输入子代码,但是当我fork()正常(没有封装)时,它就像魅力一样。

我哪里出错了?

1 个答案:

答案 0 :(得分:0)

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