Как я могу убить команду речи фестиваля?

Допустим, я запускаю следующую команду:

cat /var/log/dmesg | festival --tts

Это может вернуть сообщение [1] 4726с указанием идентификатора процесса, связанного с этой операцией. Когда я бегу kill 4726 или же killall festival или же killall cat или же killall aplayречь не прекращается (или, по крайней мере, продолжается некоторое время, прежде чем остановиться). Если я запускаю команду выше, как я могу убить то, что она начинает делать?

1 ответ

Решение

Kill отправляет SIGTERM в программу. SIGTERM приказывает программе остановиться, что позволяет ей корректно завершить работу. Программа распределяет память, закрывает соединения, сбрасывает на диск, удаляет временные файлы и т. Д. Поэтому SIGTERM может быть не быстрым или быстрым.

Kill -9, отправляет SIGSTOP или SIGKILL, которые видны только ядру. Ядро прекратит процесс. Хотя это быстрее, это не позволяет изящный выход.

Я не знаком с Festival, поэтому, если вы беспокоитесь о том, что эти команды отменяют процессы, и вы хотите остановить всех детей, вы можете просто форсировать проблему, порождая их всех из оболочки bash. Когда вы убиваете родительскую оболочку bash, она уничтожает все принадлежащие ей процессы.

bash -c "cat /var/log/dmesg | festival --tts" &

Вы получите pash для оболочки bash, которую вы можете убить и очистить все подпроцессы.

Другие вопросы по тегам