C – 用popen获取进程的PID

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

只需编写自己的popen实现,返回PID。 它比现有的popen周围的一些疯狂的hack更难看。 您可以在网上找到源代码到popen实现。 这是一个 。

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