특정 시간 동안 Bash Run 명령?


12

내 bash 스크립트를 만들고 있습니다. 20 초와 같은 특정 시간 동안 명령을 실행하고 명령을 종료하려면 어떻게해야합니까? 나는 많은 해결책을 시도했지만 아무것도 효과가 없으며 성공하지 않고 타임 아웃 명령을 시도했습니다. 이것에 대한 해결책을 알려주십시오.

예 : 10 초 후에 스크립트와 터미널 에서이 명령을 실행하고 싶습니다

some command

답변:


14

흠, 그 트릭을해야합니다 :

xmessage "Hello World" &
pidsave=$!
sleep 10; kill $pidsave

xmessage여기서 빠른 테스트 사례를 제공합니다 (귀하의 경우 airodump 명령이 있어야 함). &배경에 넣습니다.

$!마지막으로 시작된 프로세스의 PID를 보유합니다 (예 : /programming//a/1822042/2037712 참조 ). PID는 변수에 저장됩니다 pidsave.

대기 ( sleep) 후 TERM프로세스에 신호를 보냅니다 .


고마워 친구 작동하지만 이제 1 문제가 있습니다. 명령으로 생성 된 출력을보고 싶지만 xmessage 창에는 아무것도 표시되지 않습니다.
Umair Riaz

@UmairRiaz : xmessage는 예일뿐입니다. 질문의 예를 조정하고 명령의 출력을 기록 some command > logfile &하려면 첫 번째 줄에 사용하십시오. 나중에 분석 할 수 있습니다 logfile.
mpy

4

bash 프롬프트에서 사용할 수 있습니다 "

  • your_command & sleep 20; kill $!
  • 또는 시간 제한 명령을 사용 : 예를 aptget install timeout하고timeout -k 3m 14s your_command
  • 또는 expect여기에 설명 된대로 사용 하십시오 : /unix/43340/how-to-introduce-timeout-for-shell-scripting
  • 또는 펄로 그것을하십시오 : perl -e "alarm 10; exec @ARGV" "Your_command"
  • 또는 이보다 암호 솔루션을 사용하십시오 : $COMMAND 2>&1 >/dev/null & WPID=$!; sleep $TIMEOUT && kill $! & KPID=$!; wait $WPID( 출처 및 설명 )

1

또 다른 방법은 pgrep $ pattern 또는 pkill $ pattern을 사용하는 것입니다. 주어진 패턴과 일치하는 모든 PID를 반환하여 시스템에서 실행중인 모든 프로세스를 찾습니다. 따라서 PID 범위를 소유 한 PID로만 제한하려면 다음을 사용하십시오. pgrep -P $ mypid $ pattern 또는 pkill -P $ mypid $ pattern

따라서 설정된 시간 동안 백그라운드 프로세스를 실행하려면 스크립트는 다음과 같습니다.

#!/bin/bash 
mypid=$$
run_something &
sleep $time_in_seconds
pkill -P $mypid something

이것은 현재 상위 PID에서 실행되는 동일한 이름 패턴을 가진 모든 프로세스를 종료시킵니다. 따라서이 프로세스를 사용하여 여러 프로세스를 시작하고 특정 시간이 지나면 동시에 프로세스를 모두 종료 할 수 있습니다.


0

ebay-alarm 과 같은 명령 줄 알람 시계를 사용할 수 있습니다

알람 시계 스크립트를 설치하고

ebay-alarm 10 sec -c some command &

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.