2012-02-27 58 views
3

我有一個用C編寫的程序,它使用popen打開另一個程序。我希望獲得該程序的pid或某種類型的處理程序,以便在一定的時間限制後將其殺死,或者超過某些內存和標準輸出限制。我認爲這必須用ptrace完成,它需要PID,我不知道如何獲得。C - 獲取使用popen打開的進程的PID

回答

6

只需編寫您自己的實現popen返回PID。它比現有的popen周圍的一些瘋狂的駭人聽聞要難得多。你可以在網上找到popen實現的源代碼。 Here's one

+1

s /瘋狂/可怕:-) – 2012-02-27 09:25:36

+1

非常感謝。似乎是最好的解決方案。 – Paris 2012-02-27 09:48:00

0

您可能也可以使用ulimits和其他技巧來實現所需的功能,而無需使用ptrace。你可以通過編寫你的命令來做到這一點,類似於"sh -c 'ulimit [ulimit strings]; whatever-command'"ulimit -v負責RAM限制。 CPU時間限制(ulimit -t)可能可以接近時間限制;如果不是,如果你願意重寫popen,那麼你可以在那裏貼一個電話給setitimer。標準輸出不那麼簡單;但如果你使用shell重定向登錄stdout,那麼我認爲ulimit -f就可以做到這一點。如果你正在閱讀父母的孩子標準輸出,你可以自己跟蹤它,如果他們的時間太長,會用信號殺死。