У меня есть простой скрипт bash, который просто перенаправляет вывод sevice в файл:
#!/bin/sh
SERIAL_LOCK=/tmp/serial.lock
if [ -f $SERIAL_LOCK ]
then
read pid < $SERIAL_LOCK
echo "kill previous serial logger with pid $pid"
kill $pid
fi
echo $$ > $SERIAL_LOCK
echo "starting with $$ ..."
cat -s /dev/ttyUSB0 > /serial.log
echo "serial logger $$ stopped"
После многократного вызова этого скрипта команда kill
убивает экземпляр скрипта, но есть процесс cat
, который не уничтожается после каждого вызова этого скрипта, например:
ps aux | grep cat
root 5417 0.0 0.0 4304 304 pts/0 S 09:45 0:00 cat -s /dev/ttyUSB0
root 5425 0.0 0.0 4304 344 pts/0 S 09:45 0:00 cat -s /dev/ttyUSB0
root 5434 0.0 0.0 4304 304 pts/0 S 09:45 0:00 cat -s /dev/ttyUSB0
root 5437 0.0 0.0 4304 336 pts/0 S 09:45 0:00 cat -s /dev/ttyUSB0
ps aux | grep serial
root 5435 1.2 0.5 5008 2580 pts/0 S 09:45 0:00 /bin/sh /usr/sbin/serial_log.sh
Почему сценарий уничтожения не вызывает уничтожение процесса cat, запускаемого этим сценарием, и как я могу заставить его работать так, как ожидается: одновременно выполняется только один экземпляр сценария f и команда cat?