MyTetra Share
Делитесь знаниями!
Как отвязать выполнение скрипта от терминала и процесса
Время создания: 16.02.2021 15:04
Текстовые метки: linux, bash, шелл, терминал, процесс, скрипт, оторвать, отвязать, отвязывание, команда, udev
Раздел: Компьютер - Linux - Bash - Терминал

Отвязывание от терминала


Добавление символа амперсанд & в конец команды заставляет данную команду отвязаться от текущего терминала:


команда &



Отвязывание от процесса


Иногда нужно отвязаться не только от терминала, но и от родительского процесса. Для этого можно команду заключить в круглые скобки:


(команда &)


Оборачивание в конструкцию ( ... &) отрывает выполнение команды от текущего терминала, и делает команду прямой наследницей процесса init.



Отвязывание исполнения команды в udev


Иногда необходимо выполнить команду в отдельном потоке с задержкой перед ее исполнением в несколько секунд. Для этого создают два скрипта: первый скрипт вызывает второй с помощью конструкции & или (... &), а во втором прописана задержка командой sleep, и прочие команды.


Проблема в том, что если попробовать запустить эти два скрипта такими способами внутри udev, то второй скрипт, запускаемый "отвязанном" режиме, не будет выполнен. Udev не даст выполниться "отложенный" на несколько секунд командам, так как в 2013 году было принято решение, что все порожденные процессы Udev, обрабатывающие события, должны быть завершены перед тем, как Udev пойдет обрабатывать следующие события.


Чтобы это обойти, можно воспользоваться следующим хаком:


echo команда | at now


Такая команда породит задачу, которая будет запланирована к исполнению сразу же. Особенность в том, что созданная задача будет никак не связана с udev. Udev не сможет отследить, что команда или скрипт породила какой-то поток, потому что данная команда создает задачу, а не поток. Поэтому ничто не помешает исполнению задержки и кода после нее.


Так же в этом разделе:
 
MyTetra Share v.0.53
Яндекс индекс цитирования