Как остановить команду cat, когда она читает из именованного канала? - PullRequest
1 голос
/ 25 января 2020

У меня есть именованный канал, который получает данные очень медленно, но бесконечно, я хочу скопировать содержимое именованного канала в отформатированные файлы, пока они поступают.

У меня есть что-то вроде этого

do
    cat /tmp/big_file > `printf '%(%Y/%m/%d)T' -1`.output &
    sleep 3590
    kill $!
    sleep 10
done

Безопасно ли просто убить cat? Или я мог потерять некоторые данные в своем буфере? Как мне сказать кошке, что пора остановиться?

1 Ответ

0 голосов
/ 25 января 2020

Если вы не хотите использовать while read, вы можете отправлять сигналы также с kill, как в https://unix.stackexchange.com/questions/2107/how-to-suspend-and-resume-processes По умолчанию kill отправляет SIGTERM. Вы также можете отправлять сигналы, используя C или код оболочки, как в https://www.thegeekstuff.com/2011/02/send-signal-to-process/ С помощью SIGTSTP вы приостанавливаете процесс, SIGCONT продолжает его, список всех сигналов находится в http://man7.org/linux/man-pages/man7/signal.7.html

https://unix.stackexchange.com/questions/2107/how-to-suspend-and-resume-processes

Некоторые ошибки описаны в https://unix.stackexchange.com/questions/149741/why-is-sigint-not-propagated-to-child-process-when-sent-to-its-parent-process

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...