2016-11-03 4 views
0

다음은쉘 스크립트에서 ctrl + C를 제공하는 방법은 무엇입니까?

while [ 1 ]; do 
val=`expr $val + 1` 
ksh ./run.ksh //This line needs the keyboard interaction so i can't run in background. It takes too long time to complete so i need to kill the above command using ctrl+C 
echo "pid=$!" 
echo "pid=$$" 
sleep 40 
val1=val; 
done; 

./run.ksh, 내가 테스트를 자동화/실행하려고 스크립트입니다 - 응답을 다른 기계와 대기로 데이터를 전송하는 일부 비즈니스 로직을 가지고 스크립트입니다. 응답을받은 경우에도 처리를 완료하는 데 걸리는 시간을 기다립니다. 왜냐하면 연결이 닫히고 다른 정리 활동을하기를 기다리기 때문입니다.

내 문제는 내가 Ctrl + C를 보내 몇 초 후에 그 스크립트를 죽이고 싶다는 것입니다. 내가봤을 때 나는 그 $ 발견! 백그라운드 프로세스의 프로세스 ID를 얻는 데 사용할 수 있지만이 경우에는 사용할 수 없습니다.

쉘 스크립트에서 ctrl + C를 보낼 수 있습니까?

미리 감사드립니다.

+0

사용 :'kill -SIGINT pid' – sat

+0

'pidof sleep'이 필요합니다. sleep을 호출하는 것을 기억하고,'sleep '에 대한 서브 쉘을 생성합니다.'PID'는 스크립트의 PID와는 별개입니다. –

+0

'bash'와'ksh'을 혼합하고 있기 때문에,'sleep'은'bash'에서 사용할 때 외부 프로그램이지만'ksh'에 내장 된 쉘이므로 하위 쉘을 생성하지 않습니다. – cdarke

답변

0

timeout 명령을 사용하십시오. 예를 들어 30 초 후에 사망합니다.

timeout 30 ksh ./run.ksh 
+0

입력 해 주셔서 감사합니다. 스크립트 run.ksh가 서버에 데이터를 보내지 않습니다. 나는 Diameter SH 메시지를 서버에 보내는 Seagull 스크립트라는 것을 추가하고 싶습니다. – Saravanan

관련 문제