我有一個用C編寫的程序,它使用popen打開另一個程序。我希望獲得該程序的pid或某種類型的處理程序,以便在一定的時間限制後將其殺死,或者超過某些內存和標準輸出限制。我認爲這必須用ptrace完成,它需要PID,我不知道如何獲得。C - 獲取使用popen打開的進程的PID
3
A
回答
6
只需編寫您自己的實現popen
返回PID。它比現有的popen
周圍的一些瘋狂的駭人聽聞要難得多。你可以在網上找到popen
實現的源代碼。 Here's one。
0
您可能也可以使用ulimits和其他技巧來實現所需的功能,而無需使用ptrace。你可以通過編寫你的命令來做到這一點,類似於"sh -c 'ulimit [ulimit strings]; whatever-command'"
。 ulimit -v
負責RAM限制。 CPU時間限制(ulimit -t
)可能可以接近時間限制;如果不是,如果你願意重寫popen
,那麼你可以在那裏貼一個電話給setitimer
。標準輸出不那麼簡單;但如果你使用shell重定向登錄stdout,那麼我認爲ulimit -f
就可以做到這一點。如果你正在閱讀父母的孩子標準輸出,你可以自己跟蹤它,如果他們的時間太長,會用信號殺死。
相關問題
- 1. 打開與POPEN的過程和獲取PID
- 2. linux - 獲取進程的pid
- 3. ms C++獲取當前進程的pid
- 4. 獲取啓動進程的PID C++
- 5. 用popen()打開殺死進程?
- 6. 如何使用子進程check_output獲取子進程的PID
- 7. Bash:獲取使用不同用戶的進程的PID
- 8. 從子進程獲取PID
- 9. 獲取運行firefox進程的PID
- 10. Python:給出pid獲取用戶進程的開始時間
- 11. 如何從PID使用C獲取進程名稱
- 12. 獲取通過ssh使用nohup啓動的進程的PID
- 13. 如何獲取從Bash中的eval開始的進程的PID?
- 14. 獲得在C#創建進程的PID
- 15. 如何獲取子進程的PID?
- 16. PHP:獲取特定進程的PID
- 17. 在zsh中獲取進程的pid
- 18. 獲取遞歸子進程的pid
- 19. 通過ssh獲取nohup進程的PID
- 20. 獲取後臺gnome-terminal進程的pid
- 21. 獲取通過ssh使用sudo啓動的進程的PID
- 22. 使用JNI獲取運行時進程的PID
- 23. 獲得子進程的PID
- 24. 獲取殺死我的應用程序的進程的PID
- 25. 使用某個端口獲取進程的PID
- 26. 如何從C++中的PID獲取進程名稱?
- 27. 獲取其他用戶啓動的後臺進程的PID
- 28. 如何通過php中的popen獲得進程打開的輸出?
- 29. C++使用系統獲取PID
- 30. Win32進程如何獲取父進程的PID?
s /瘋狂/可怕:-) – 2012-02-27 09:25:36
非常感謝。似乎是最好的解決方案。 – Paris 2012-02-27 09:48:00