2012-02-27 4 views
3

popen을 사용하는 다른 프로그램을 여는 C로 작성된 프로그램이 있습니다. 나는 그 프로그램의 PID 나 어떤 종류의 핸들러를 얻고 싶다. 그래서 특정 제한 시간이 지나면 그것을 죽이기 위해, 또는 어떤 램과 stdout 한계를 초과한다면 그것을 죽이려고한다. PID를 필요로하는 ptrace로이 작업을 수행해야한다고 생각합니다. PID를 얻는 방법을 모르겠습니다.C - popen으로 열린 프로세스의 PID를 얻으십시오

답변

6

PID를 반환하는 popen의 구현을 직접 작성하십시오. 기존의 popen 주변의 어떤 미친 짓보다 훨씬 못 생겼습니다. 그물을 통해 popen 구현 소스 코드를 찾을 수 있습니다. Here's one.

+1

s/미친/끔찍한 :-) –

+1

대단히 감사합니다. 최고의 솔루션 인 것 같습니다. – Paris

0

ptrace를 사용하지 않고 ulimits 및 다른 트릭을 사용하여 원하는 기능을 수행 할 수도 있습니다. 명령을 작성하여 "sh -c 'ulimit [ulimit strings]; whatever-command'"과 비슷한 것으로 작성할 수 있습니다. ulimit -v은 RAM 제한을 처리합니다. CPU 시간 제한 (ulimit -t)은 제한 시간을 근사 할 수 있습니다. 그렇지 않다면 popen을 다시 쓰고 싶다면 setitimer에 전화를 걸 수 있습니다. stdout은 덜 직관적입니다. 하지만 쉘 리다이렉트로 stdout을 로깅한다면 ulimit -f이 그렇게 할 것이라고 생각합니다. 부모에게서 아이의 stdout을 읽고 있다면 스스로 추적 할 수 있고 너무 길면 신호로 죽일 수 있습니다.

관련 문제