如何在Linux下创建和监控子进程?

时间:2013-07-29 08:01:50

标签: c++ c linux unix

我想编写一个具有以下功能的C / C ++程序:

  1. 将二进制可执行C程序作为子进程运行。
  2. 观察子进程的内存使用情况,并能够在超过内存时终止子进程,例如超过100MB。
  3. 当子进程运行一段时间后,如1秒,我可以终止它。
  4. 远离任何Linux内核函数,这意味着当子进程要求函数不属于标准C库时,我可以阻止它并终止进程。
  5. 如何实现这些?或者你可以给我一个提示,我可以自己找出来!谢谢!

1 个答案:

答案 0 :(得分:4)

首先,您应该具备一些基本的Linux编程知识,因此请仔细阅读Advanced Linux Programming。研究像sash这样的简单shell的源代码,并使用strace(1)(例如在现有命令上)来猜测使用了哪些系统调用。

然后你可能想要使用setrlimit(2)ptrace(2)系统调用。

你写道:

  

远离任何Linux内核函数,这意味着当子进程要求函数不属于标准C库时,我可以阻止它并终止进程。

我不确定这有什么意义。任何Linux程序(非感知永不终止while(true);循环除外)都会执行一些syscalls,特别是write(2)某些输出(请参阅syscalls(2)列表)。并且系统调用是应用程序要求内核执行某些操作的意思(因此系统调用 以受控方式使用Linux内核函数)。

请注意,程序可以在不使用GlibC的情况下进行系统调用。还有替代的libc实现,例如MUSL-Libc

您可能也对LD_PRELOAD tricks感兴趣。

/proc/文件系统肯定很有用。阅读proc(5)