[Редагувати: Це схоже на деякі інші запитання про те, як знищити всі породжені процеси - всі відповіді, здається, використовують 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-м прикладом?