나는 모든 c 바이너리를 반복 .out
하고 그 출력을 텍스트 파일에 복사하는 루프를 작성했습니다(각 바이너리의 출력은 단지 한 줄의 해시, 한 줄의 프로그램 출력입니다). 이것은 지금까지 내 코드입니다.
for j in {1..10}
do
./gcc-$j.out >> gcc-result.txt
done
안타깝게도 일부 바이너리에는 올바른 실행을 방해하는 몇 가지 알려지지 않은 문제가 있습니다(멈추고 다음 프로그램을 계속할 수 없음).
나는 이 C 코드를 고치지는 않을 것이지만, 내 bash가 주어진 제한 시간(예: 10초) 내에 자동으로 다음 프로그램을 실행하도록 점프하고 여기에 "0"을 쓰길 원합니다 gcc-result.txt
.
이 문제를 해결하기 위한 아이디어가 있으시면 미리 감사드립니다.
답변1
timeout 명령을 사용할 수 있습니다.
if timeout 10 ping google.fr > /dev/null
then
echo "process successful"
else
echo "process killed"
fi
보여주고 process killed
,
if timeout 10 ls /usr/bin | wc -l > /dev/null
then
echo "process successful"
else
echo "process killed"
fi
process successful
이를 기반으로 다음과 같이 각 명령을 실행하여 if; then; else; fi
표준 출력을 임시 파일로 리디렉션하고 성공할 경우 해당 임시 파일을 대상 파일에 복사하고 실패할 경우 대상 파일을 생성할 수 있습니다 .
프로세스를 종료하고 PID가 재사용되지 않도록 하는 방법시간 제한이 없으면 도움이 될 수 있습니다.
답변2
물론 일정 시간 실행 후 하위 프로세스를 종료하고 bash 스크립트에 원하는 텍스트 파일 "0"을 추가할 수 있습니다.
당신은 찾을 수 있습니다지정된 시간 초과 후 하위 프로세스를 종료하는 Bash 스크립트효과가있다.