【问题标题】:How to create and monitor child process under Linux? [closed]Linux下如何创建和监控子进程? [关闭]
【发布时间】:2013-07-29 08:01:49
【问题描述】:

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

  1. 将二进制可执行 C 程序作为子进程运行。
  2. 观察子进程的内存使用情况,并在子进程过度使用内存时终止子进程,比如超过 100MB。
  3. 当子进程运行了给定时间(例如 1 秒)后,我可以终止它。
  4. 让它远离任何 linux 内核函数,这意味着当子进程请求不属于标准 C 库的函数时,我可以阻止它并终止该进程。

知道如何实现这些吗?或者你可以给我一个提示,我可以自己找出来!谢谢!

【问题讨论】:

    标签: c++ c linux unix


    【解决方案1】:

    首先,你应该有一些基本的Linux编程知识,所以请仔细阅读Advanced Linux Programming。研究一些简单的 shell 的源代码,例如 sash,并使用 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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多