我的任务要求我封装过程处理原则。
这是我的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()
正常(没有封装)时,它就像魅力一样。
我哪里出错了?我如何同步孩子和父母,以确保他们都做好自己的工作?
答案 0 :(得分:0)
我无法验证您的示例,但我发现您的类Process中存在明显的缺陷。它定义了自定义构造函数和析构函数,但未定义违反rule of three的赋值运算符。
请考虑以下代码:
void example()
{
Process pro;
{
Process pro2 = pro;
}
// here pro.pid_ will have id of the already killed process
}