Почему $! возвращает неправильный идентификатор процесса для подоболочки, работающей в фоновом режиме?

Вот еще один,хотя это не бесплатно:https://gitblade.com

На момент написания этой статьи он все еще находится в стадии бета-тестирования, но поддерживает большинство основных функций Git -предварительный просмотр изменений, фиксацию, извлечение, отправку, просмотр истории, ветки.

enter image description here

4
15.02.2020, 14:12
1 ответ
$(sleep 5)

запускает оболочку, которая выполняет sleep. pid, указанный в $!, принадлежит оболочке.

Здесь подстановка не нужна,

 sleep 5 &

даст вам pid sleep.

Я предполагаю, что sleepв вашем примере заменяет что-то другое, но в любом случае замена фона, вероятно, не нужна. Используя только подоболочку,

(sleep 5) &

обычно дает вам pid sleep, потому что многие оболочки заменяют себя дочерней командой, когда они запускают последнюю команду в подоболочке, что эффективно повторно использует pid подоболочки для sleep; но

(sleep 5; sleep 5) &

даст вам pid оболочки, а не sleep.

8
28.04.2021, 23:23

Теги

Похожие вопросы