克隆使用CLONE_NEWPID并期望fork的Upstart问题

时间:2013-06-04 18:05:57

标签: upstart

我有一个类似于以下内容的二进制文件:

int RealMain() {
  ... runs forever ...
}

int main() {
  clone(RealMain, ..., CLONE_NEWPID /*clone flags*/, ...);
  _exit(0);
}

想法是启动一个通过clone()启动实际进程并退出的进程。此模型的原因是“CLONE_NEWPID”标志。我需要应用程序在单独的PID命名空间中运行。因此,需要使用CLONE_NEWPID标志通过克隆创建实际的应用程序进程。

当我从命令行启动这个二进制文件时,一切运行良好。但是当我通过Upstart启动它时,clone()失败,errno设置为EPERM,并且永远不会创建新的PID命名空间。由于上面的clone()调用,我在Upstart配置中使用“expect fork”。这样我就可以将活动与执行RealMain()的子进程的生命周期联系起来。

expect fork
respawn

我想知道“expect fork”的实现与使用CLONE_NEWPID创建新的PID命名空间之间是否存在一些不良的交互。我找到了关于“expect fork”和ptrace问题的以下来源,但没有发现其他人报告了CLONE_NEWPID的问题:

https://blueprints.launchpad.net/ubuntu/+spec/foundations-q-upstart-overcome-ptrace-limitations

由于

0 个答案:

没有答案