3

我有一个用 C 语言编写的程序,它使用 popen 打开另一个程序。我想获得该程序的 pid 或某种处理程序,以便在一定时间限制后杀死它,或者如果它超过了一些 ram 和 stdout 限制。我认为这必须用ptrace来完成,它需要PID,我不知道如何获取。

4

2 回答 2

6

只需编写您自己的实现popen即可返回 PID。它比现有的一些疯狂的黑客要丑得多popenpopen您可以在整个网络上找到实现的源代码。这是一个

于 2012-02-27T09:12:26.260 回答
0

您可能还可以使用 ulimits 和其他技巧来实现所需的功能,而无需使用 ptrace。您可以通过将命令编写为类似于"sh -c 'ulimit [ulimit strings]; whatever-command'". ulimit -v照顾 RAM 限制。CPU 时间限制 ( ulimit -t) 可能能够接近时间限制;如果没有,并且如果您愿意重写popen,那么您可以setitimer在那里拨打电话。stdout 不那么简单;但是如果您使用 shell 重定向记录标准输出,那么我认为ulimit -f会这样做。如果您在父母中阅读孩子的标准输出,您可以自己跟踪它,如果它们时间过长,则用信号杀死。

于 2012-02-27T14:28:37.490 回答