1
여기에이 코드가 있습니다.이 코드는 병렬 또는 순차를 통해 여러 프로세스에서 여러 번 프로그램을 실행하는 것입니다. 일정 시간이 지나면 프로그램을 중단하기 위해 모든 어린이를 죽일 필요가 있습니다.특정 시간에 도달 한 후 자식 프로세스를 중지하십시오.
하지만 아이를 죽이려고 할 때마다이 줄 execvp (cmdTokens [0], cmdTokens);를 현재 실행중인 자식은 끝날 때까지 멈추지 않습니다. 루프를 죽인 것처럼 보이지만 현재 실행중인 자식은 아닙니다.
'cid'는'waitpid()'를 처음 호출 할 때 초기화되지 않습니다. 이것은 좋은 생각이 아닙니다. 아마 그것의 반환 값을 확인해야합니다. 실행 실패시 0이 아닌 값을 사용하여 종료하는 것이 일반적입니다. 표준 출력이 아닌 표준 오류 채널에 오류를보고하는 것도 좋은 생각입니다. 'alarm()'의 논리는 의심 스럽습니다. 'alarm()'은 장래의 시그널을 설정해, 일반적으로 즉시 리턴합니다. 아마도 SIGALRM 핸들러를 설정하고 알람을 설정하고 EINTR (아마도 타임 아웃이 발생했음을 나타냄) 또는 자식이 죽어 가고 있는지 확인한 후에'waitpid()'를 수행해야합니다. –
감사합니다. 나는 당신이 나에게 말할 때까지 어떻게 경보 기능이 작동 하는지를 몰랐다. 내가 한 일은 알람 방법을 상단으로 옮겨서 당신이 말한대로 미래 신호를 설정할 수 있습니다. – user1713114