2012-02-02 3 views
0

시스템에서 생성 한 프로세스를 종료 할 수 있습니까? 지금까지 내가 아는 한 System은 fork() 함수를 사용하여 새 프로세스를 작성합니다. 나는 (시스템을 호출하기 전에 그것을 fork했다.) 프로세스의 실행 시간을 추적하고 실행 제한 시간을 초과하면 그것을 죽이고 싶다. 주 프로세스로 생성 된 자식을 죽이면 system()에 의해 생성 된 자식도 죽게됩니까?시스템에 의해 생성 된 C++ 킬링 프로세스 && 실행 시간 제한

이것은 실제 코드가 아니지만 내가 무슨 말을하고 있는지 알 수 있습니다.

int pid = fork(); 
if(pid == 0) 
{ 
    system("./veryLongProgram"); 
} 
else 
{ 
    // calculate time elapsed and kill on long execution time 
} 

CPU 시간 제한을 사용할 수는 있지만 내 자식 프로세스가 잠자기하는 것을 원하지 않는 경우도 좋습니다. 만약 그렇다면 그것은 아주 오랫동안 그러한 상태에 머물러있을 수 있습니다. 수면, 일시 정지 또는 의도적으로 불리는 프로그램에 의해 호출 된 것을 방해 할 수 있습니까? 그것은 이상적 일 것입니다. 아니면 내 프로세스가 잠을 자고 있는지 확인할 수 있습니다 (이 경우에는 의도적으로 수행했는지 확인하고 인쇄 작업이 중단되었거나 일시 중지되지 않았는지 확인해야합니다).

  • 부모에 대한 배열 대신에 시스템의

  • 답변

    2
    1. 사용 execSIGARLM 신호를받을 수 있습니다. 수신시 kill 시스템 호출을 사용하여 자식을 종료하십시오. alarm 기능을 사용하여 알람을 설정하십시오.
    2. 부모가 자연스럽게 죽거나 시스템 호출 수신으로 인해 대기 할 때까지 wait 시스템 호출을 사용하십시오.

    당신은 좀 덜 가혹하게하지만 먼저 첫번째 TERM 신호를 전송하고 아이에게 KILL 신호를 보내기 전에 정돈 할 수있는 기회를 제공 할 수 있습니다.