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查看,子进程变成僵尸进程了。