두 개의 FIFO 사이에 입/출력 통신을 허용하도록 IO 스크립트를 설정하려고합니다 (하나의 FIFO는 입력 용이고 다른 하나는 출력용입니다).bash에서 프로세스가 파괴되었는지 확인 하시겠습니까? (가능성이 SIGINT 잡으려고)
입력을 입력하는 동안 내 서버가 출력을 수신해야합니다. Internals/servout
과 Internals/servin
은 모두 FIFO입니다. 현재 입력을 기다리는 동안 백그라운드에서 tail
을 실행하여이를 구현합니다.
이 내 현재 코드입니다 : 내가 실수로 스크립트를 종료 Ctrl-C를 입력 할 때
#!/bin/bash
# io.sh
tail -f -n 0 Internals/servout &
tpid=$!
read -p ">> " v
while [ $? -eq 0 ] && [ "$v" != "exit" ] && [ "$v" != "quit" ]; do
echo $v > Internals/servin
sleep .2
read -p ">> " v
done
kill $tpid
내가 실행 해요 가장 큰 문제입니다. 이 경우 tail -f -n 0 Internals/servout &
코드가 백그라운드에서 계속 실행됩니다. 당신이 상상할 수 있듯이 그것은 바람직하지 않습니다.
SIGINT 또는 유사한 신호를 보냈더라도 tail
명령이 종료되도록하는 방법이 있습니까? 나는 파이썬에서 finally
키워드와 동일한 목적을 달성 할 수있는 무엇인가를 생각 중이거나, 을 사용하여 tail
명령을 현재 스크립트의 프로세스에 의존하게 만든다.
제 나쁜 습관에 대해 자유롭게 의견을 말하십시오 - bash
은 제 최신 언어 중 하나이며 건설적인 비판은 개선 할 수있는 가장 빠른 방법입니다.
있지만, 모두'SIGKILL'이 나쁘다는 것을 알고 있습니다.) 그렇지 않으면,'['는 더 이상 쓸모가 없으므로 이중 대괄호'[['. 또 다른 한가지로, 'sleep'은 초 단위의 정수를 잠자 운다. 그래서'sleep .2'는 당신이 기대하는 것을하지 않을 것입니다. –
허,'함정 '명령에 대해 몰랐어. 맨 페이지 검색을 할 시간이야! 'sleep .2' 명령의 주제에 관해서, 그것은 내가 필요로하는 것을 정확히 수행합니다 - 1/5 초 동안 잠을 자지. 'NUMBER가 정수 여야하는 대부분의 구현과 달리 여기 NUMBER는 임의의 부동 소수점 수입니다.'라고 로컬 문제이기 때문에 플랫폼 특이성에 대해 걱정할 필요가 없습니다. – Kupiakos