일정 시간 후 명령줄에서 프로세스 중지/종료

일정 시간 후 명령줄에서 프로세스 중지/종료

주변 소리를 듣고 감지하는 Python 코드가 있습니다. 이것은 내 프로젝트가 아니며 온라인(SoPaRe)에서 찾았습니다. 해당 ./sopare.py -l명령을 사용하면 사운드 녹음이 시작되지만 무한 반복됩니다. 중지하고 싶을 때는 을 눌러야 합니다 Ctrl+C.

제 의도는 이 프로그램을 10초 후에 자동으로 종료시키려는 건데, 작성자와 이야기를 해보니 이 프로그램에는 시간 제한이 없다고 하더군요.

죽이려고 했는데 kill PID프로그램 PID이 실행될 때마다 변경됩니다. 일정 간격 후에 어떻게 중지합니까 bash?

또는 Python에서 명령을 사용하여 이를 실행할 수 있습니다 os.system().

답변1

가장 간단한 해결책은 timeoutGNU coreutils 컬렉션을 사용하는 것입니다(대부분의 Linux 시스템에 기본적으로 설치됨).

timeout 10 ./sopare.py -l

man timeout자세한 옵션은 유틸리티 설명서( )를 참조하세요 . GNU가 아닌 시스템에서는 gtimeout이 유틸리티를 GNU coreutils처럼 설치할 수 있습니다.

GNU coreutils를 사용할 수 없는 경우 다른 옵션은 백그라운드에서 프로세스를 시작하고 종료 신호를 보내기 전에 10초 동안 기다리는 것입니다.

./sopare.py -l &
sleep 10
kill "$!"

$!가장 최근에 시작된 백그라운드 프로세스(이 경우 Python 스크립트)의 프로세스 ID입니다.

대기 시간이 다른 용도로 사용되는 경우:

./sopare.py -l & pid=$!
# whatever code here, as long as it doesn't change the pid variable
kill "$pid"

답변2

다음 bash 스크립트를 사용해 보세요:

#! /bin/bash
./soapre.py -l
PID=`ps u | awk ' $11 == "./soapre.py" { print $2 }'`
sleep 10
kill $PID

이 명령은 스크립트가 백그라운드에서 실행되는 sleep 10동안에만 bash 스크립트를 일시 중지한다고 가정합니다 . soapre.py또한 COMMAND열의 ps u값이 "./soapre/py". 스스로 할 수 있는 간단한 수정이지만 작동해야 합니다.

관련 정보