bash: выполнить команду в фоновом режиме и захватить pid

Я пишу сценарий bash 4.1 …

  • Хотелось бы запустить другой скрипт (или внутреннюю функцию) в фоновом режиме …
  • И захватить pid этого фонового задания в переменной в сценарии переднего плана …
  • Если задание не запускается, переменная должна получить значение null (т.е. "").

Любой из них работает, если фоновая работа всегда начинается …

cmd & VAR=$! or... ( cmd & ); VAR=$! 

Если команда cmd запускается, pid последней команды запускается ($!), Это тот, который мы хотим, и $ VAR будет правильным.

Однако, если cmd не запускается, $ VAR будет pid последней команды до того, что началось, что может быть pid самого скрипта переднего плана. Так как мне нужен pid из cmd с целью убить процесс при определенных условиях позже, возможно, получить неправильный pid просто не будет.

Мне действительно нужно, чтобы VAR менялся только в том случае, если выполнялось фоновое задание. Что-то вроде синтаксически неправильного …

 VAR= ( cmd & ); && VAR=$! 

Реализованное решение

Комментарии и ответ Джозефа Р. были очень полезны. В интересах любого, у кого есть аналогичная проблема …

Следующая функция bash запускает сценарий standby GtkDialog в фоновом режиме. Быть внутри функции, которая сама запускается в подпроцессе, кажется, обеспечивает изоляцию, мне нужно избегать получения идентификатора вызывающего сценария вместо PID standby сценария, если standby сбой …

 function standbyBg () { ifHelpShow "$1" 'standbyBg Run standby (busy "throbber") in background and echo its pid. Example: standbyPID=$(standbyBg) Revised: 20131123 docsalvage' && return # standby >/dev/null 2>&1 & echo $! } После function standbyBg () { ifHelpShow "$1" 'standbyBg Run standby (busy "throbber") in background and echo its pid. Example: standbyPID=$(standbyBg) Revised: 20131123 docsalvage' && return # standby >/dev/null 2>&1 & echo $! } 

Interesting Posts

Как заменить один пакет другим с помощью yum?

filefrag fibmap возвращает неправильное физическое смещение для FAT

Каковы конкретные соглашения об именах для переменных в языке сценариев оболочки bash?

Как перечислять имена файлов, которые содержат пробелы и специальные символы, без использования find

Текущий IP-адрес, видимый в Интернете?

Получение SVN 1.6 / 1.7 на Fedora 20

Как предоставить чтение, запись разрешений с использованием IP-адресов в SAMBA

Установка типа файла vim с помощью модели не работает должным образом

Отменить или изменить по умолчанию «повторное обнаружение мониторов» windows + p cinnamon keybinding с использованием gsettings

Как разбить файл на основе информации в столбце в Linux

Команда grep с ls -a работает неправильно?

Независимость от оболочки для строк в скриптах

замена жестких дисков RAID до отказа (3 года!)

Правильное поведение ловушек EXIT и ERR при использовании `set -eu`

Как иметь хвост -f показать цветной выход

Linux и Unix - лучшая ОС в мире.