Можно $! вызвать условия гонки при использовании в сценариях, работающих параллельно?

Для SonarQube я вместо этого просто следовал этому :https://devopscube.com/setup-and-configure-sonarqube-on-linux/, в котором рассказывается, как добавить SonarQube в качестве службы... это было, как ни странно, гораздо проще, чем подход systemd.

Для первой команды в файле это все еще нерешенный вопрос...

8
25.08.2019, 12:15
1 ответ

$!гарантированно даст вам pid процесса, в котором оболочка выполнила эту команду tail. Оболочки однопоточные, каждая оболочка живет в своем собственном процессе со своим набором переменных. Не может быть, чтобы $!одной оболочки просочилось в другую оболочку, точно так же, как назначение переменной оболочки в одной оболочке не повлияет на переменную с тем же именем в другой оболочке (. если мы отложим универсальные переменные оболочки fish).

Итак, tail -f /dev/null— это команда, которая выполняется бесконечно, но для короткоживущих -команд обратите внимание, что, поскольку количество возможных идентификаторов процессов ограничено, идентификаторы процессов неизбежно заканчиваются повторным использованием.

В:

true &
pid=$!

Этот $pidбудет содержать идентификатор процесса, в котором запущена оболочка true, но к тому времени, когда вы используете этот $pid, этот pid вполне может быть мертв и может ссылаться на другой процесс.

16
27.01.2020, 20:09

Теги

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