[Редактировать: это похоже на некоторые другие вопросы, спрашивающие, как убить все порожденные процессы - ответы, похоже, используют pkill. Таким образом, суть моего вопроса может заключаться в следующем: есть ли способ распространения Ctrl-C / Z на все процессы, созданные скриптом?]
При вызове SoX rec
с помощью timeout
команды из coreutils (обсуждаемой здесь ), кажется, нет никакого способа убить его нажатием клавиши, после того как он был вызван из скрипта Bash.
Примеры:
timeout 10 rec test.wav
... можно убить с помощью Ctrl+ Cили Ctrl+ Zиз bash, но не тогда, когда он вызывается из скрипта.
timeout 10 ping nowhere
... можно убить с помощью Ctrl+ Cили Ctrl+ Zиз bash, и с Ctrl+, Zкогда он запускается из скрипта.
Я могу найти идентификатор процесса и уничтожить его таким образом, но почему я не могу использовать стандартное нажатие клавиши разрыва? И есть ли способ структурировать мой сценарий так, чтобы я мог?
timeout
в моей системе, но уничтожение sleep
работает независимо от того, набирается ли оно непосредственно в командной строке, происходит из источника, выполняется или явно передается через интерпретатор
bg
изfg
команд. В любом случае, есть ли разница между вашими 1-м и 3-м примерами?