Linux下如何创建和监控子进程? [关闭]

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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)。

【讨论】:

以上是关于Linux下如何创建和监控子进程? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

【linux c】子进程结束了,父进程还在,用ps -ef查看,子进程变成僵尸进程了。

如何关闭 Qt 子进程并让子进程执行清理代码?

linux下为什么不能有孤儿进程

linux下fork两子进程为啥只有一个读取到pipe的内容?

Linux下异步回收子进程

Linux下进程的创建(system(); fork(); exec*())