Как я могу убить команду речи фестиваля?
Допустим, я запускаю следующую команду:
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, которую вы можете убить и очистить все подпроцессы.