Linux 초보자로서 저는 약간의 문제에 직면하고 있습니다. 다음과 같이 터미널에 1개의 명령이 있습니다.
이 명령을 실행하면 몇 줄이 생성되지만 문제는 ctrl + c
수동으로 누르지 않고 5초 후에 이 명령을 중지해야 한다는 것입니다.
ctrl + c
이 과정을 1000번 이상 반복해야 하기 때문에 실제로 누르지 않고 컴퓨터를 통해 이 작업을 수행하려면 어떤 방법을 사용해야 합니까 ?
- 명령 실행
- 중지 명령
- (xx초 동안 멈춤)
- 명령 실행
- 중지 명령
- (xx초 동안 멈춤)
- 등.
특별한 프로그램을 설치해야 합니까, 아니면 bash 스크립트를 사용하여 설치할 수 있습니까?
답변1
백그라운드에서 명령을 실행한 다음 포그라운드에서 5초 동안 대기한 다음 백그라운드 명령을 종료할 수 있습니다.
백그라운드에서 명령을 실행합니다.
command &
PID 명령을 변수에 저장합니다.
command_pid=$!
5초간 수면:
sleep 5
백그라운드 프로세스 종료:
kill "$command_pid"
이제 일시 중지를 추가하고 전체 루프 등을 이동할 수 있습니다.
반지:
for ((i=0; i<1000; i++)); do
crunch 7 7 abcdefghijklm &
command_pid=$!
sleep 5
kill "$command_pid"
sleep 5 #pause
done
답변2
사용 가능하다고 가정하면 timeout(1)
쉘 명령은
timeout 5s whateverthatcommandis; sleep 99
프로그램은 5초 후에 종료되어야 하며(프로그램이 잘 작동한다고 가정할 때...) 그 이후에는 sleep
xx초가 무엇이든 상관없습니다. 그런 다음 원하는 경우 이러한 명령을 일종의 루프로 래핑할 수 있습니다. seq
이것이 사용 가능하다고 가정하면(BSD에 있을 수 있음 jot
) 일반적인 루프는 다음과 같이 실행될 수 있습니다.
for n in `seq 1 1000`; do timeout 5s whateverthatcommandis; sleep 99; done
그런데 ZSH에서는 쉘 루프가 더 명확해질 수 있습니다.
repeat 1000 { timeout 5s whateverthatcommandis; sleep 99 }