Процессы теряют вложение для окружения при запуске через удар-x

Устройство по умолчанию, на основе имени ядра (sr0 в этом случае), всегда создается автоматически как файл физического устройства, таким образом, никакое правило не необходимо для этого.

Дополнительные синонимы затем создаются путем записи правил, которые указывают символьные ссылки, которые будут добавлены, которые указывают на реальный файл.

2
23.12.2013, 19:57
2 ответа

Нет, это не возможно:

Обычно, когда Вы запускаете программу в фоновом режиме с помощью & оболочка оставляет управление им, и это не будет завершено, когда оболочка выйдет. Это верно, даже если Вы не используете -x опция к bash.

Интерактивные оболочки являются исключением к этому правилу: они могут сделать что-то позвонившее “управление заданиями” для контроля дочерних процессов, которые они запустили, и завершите их, когда интерактивные / входят в выходы оболочки. (Это также настраивается; возможно оставить выполнение фоновых процессов, и это - на самом деле поведение по умолчанию для большинства процессов.)

Можно работать вокруг этого несколькими средствами, но только завершать emacs когда foo.foo выходы сценария, не, когда оболочка, называя его выходит – это вызвано тем, что вызов bash -x выполнения другой (sub) оболочка и интерактивная родительская оболочка не “знают” о детях подоболочки.

3
27.01.2020, 22:06

Вы можете добавить ловушку на EXIT, которая убивает все процессы в вашем сеансе:

(чтобы добавить в ваш .bashrc ):

killall_on_exit() {
  sid=$(ps -o sid= -p "$$")
  if [ "$sid" -eq "$$" ]; then
    # we're the session leader
    (
      trap '' TERM
      ps -eo pgid= -o sid= |
        awk -v sid="$sid" '$2 == sid && !seen[$1]++ {print "-" $1}' |
        xargs kill -s TERM --
    )
  fi
}
trap killall_on_exit EXIT

Это убивает все группы процессов в вашем сеансе. Это не убьет процессы, которые запускаются в новом сеансе, но поскольку новые сеансы обычно запускаются эмуляторами терминала, если вы уберете эмулятор терминала, скорее всего, процесс, который он порождает, также умрет (и его дочерние элементы, если лидер интерактивный bash с той же ловушкой).

nohup или disown обычно не делают команды невосприимчивыми к этому.

Вы можете заменить приведенные выше TERM на HUP , но тогда обратите внимание, что некоторые команды, такие как xterm , игнорируют SIGHUP.

Чтобы иммунизировать команду от SIGTERM, запустите ее как:

(trap '' TERM; emacs &)
0
27.01.2020, 22:06

Теги

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