BusyBox - Bash信号ハンドラ「エコー」の問題

BusyBox - Bash信号ハンドラ「エコー」の問題

ncまず、TCPクライアントソケットを開き、そのソケットを介して起動コマンドを送信するBashスクリプトがあります。その後、サーバーはソケットを介してデータを再送信し(nc印刷stdout)、ユーザーが表示されたデータに満足したら、Ctrl + Cを押すと、スクリプトはソケットを介して停止コマンドを送信してサーバーに何を停止するかを知らせる必要があります。仕事をしています。

nc一定時間ソケットを開いたままにするには、FIFOを開き、tail -n +1 -fそのFIFOからフィードを送信しますnc。したがって、ソケットを介してコマンドを送信するには、スクリプトがechoesをFIFOに送信するだけです。

ただし、シグナルハンドラの実行後に停止echoコマンドを送信する呼び出しは停止/停止され、返されないため、スクリプトはそのまま残ります。

私の(簡単な)コードは次のとおりです。

#! /bin/bash

# make a FIFO to use as STDIN for netcat
FIFO=/tmp/temp_fifo
mkfifo $FIFO

# open up the client socket
TAIL_PID_FILE=/tmp/tail_pid
(tail -n +1 -f $FIFO & echo $! >&3) 3> $TAIL_PID_FILE | /usr/bin/nc some_server 9999 &

# get PID of tail process
TAIL_PID=$(<$TAIL_PID_FILE)

# send the start command to tell the server to start doing its work
echo "start command" >> $FIFO

# register a signal handler so that we wait until the user presses Ctrl+C
trap "echo caught signal, stopping..." SIGINT SIGTERM

# sleep 'forever' (until the signal gets caught)
sleep 4294967295

# send the stop command. ***this right here is what hangs***
echo "stop command" >> $FIFO

# kill tail process
kill $TAIL_PID

# remove FIFO
rm -f $FIFO

LinuxのBashバージョン4.1.2でこのコマンドを実行すると、正常に実行されます。つまりecho、停止されないので stop コマンドが正常に送信されます。ただし、BusyBox(Windows / MobaXtermのバージョン1.22.1)はクラッシュします。

ここでは、シグナルハンドラに問題があるのですか(例:未定義の動作)、しかし私のコードがBusyBoxで動作しないのはなぜですか?それとも、私が知らないBusyBoxにバグや機能がないことを意味しますか?

ベストアンサー1

おすすめ記事