C - 用popen获取进程的PID

时间:2012-02-27 09:09:29

标签: c popen kill pid ptrace

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

2 个答案:

答案 0 :(得分:6)

只需编写自己的popen实现,即返回PID。它比现有popen周围的一些疯狂的hack丑陋得多。您可以在网络上找到popen实施的源代码。 Here's one

答案 1 :(得分:0)

您也可以使用ulimits和其他技巧来实现所需的功能,而无需使用ptrace。您可以通过编写类似于"sh -c 'ulimit [ulimit strings]; whatever-command'"的命令来执行此操作。 ulimit -v负责RAM限制。 CPU时间限制(ulimit -t)可能能够达到时间限制;如果没有,如果你愿意重写popen,那么你可以在那里打电话给setitimer。 stdout不那么简单;但如果您使用shell重定向记录stdout,那么我认为ulimit -f会这样做。如果你正在阅读父母的孩子的标准输出,你可以自己跟踪它,如果它们太长就会用信号杀死。