사람의 간섭 없이 터미널에서 명령을 실행/중지합니까?

사람의 간섭 없이 터미널에서 명령을 실행/중지합니까?

Linux 초보자로서 저는 약간의 문제에 직면하고 있습니다. 다음과 같이 터미널에 1개의 명령이 있습니다. 여기에 이미지 설명을 입력하세요.

이 명령을 실행하면 몇 줄이 생성되지만 문제는 ctrl + c수동으로 누르지 않고 5초 후에 이 명령을 중지해야 한다는 것입니다.

Ctrl + C 중지 명령

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초 후에 종료되어야 하며(프로그램이 잘 작동한다고 가정할 때...) 그 이후에는 sleepxx초가 무엇이든 상관없습니다. 그런 다음 원하는 경우 이러한 명령을 일종의 루프로 래핑할 수 있습니다. seq이것이 사용 가능하다고 가정하면(BSD에 있을 수 있음 jot) 일반적인 루프는 다음과 같이 실행될 수 있습니다.

for n in `seq 1 1000`; do timeout 5s whateverthatcommandis; sleep 99; done

그런데 ZSH에서는 쉘 루프가 더 명확해질 수 있습니다.

repeat 1000 { timeout 5s whateverthatcommandis; sleep 99 }

관련 정보