Почему браузер хрома уничтожается, когда я закрываю терминал несмотря на nohup?

Попробуйте это:

sudo ssh root@pacific ssh root@loquat sudo -u wwwrun svn status -uq /srv/www/htdocs/loquat 2>&1
12
13.04.2017, 15:36
3 ответа

При закрытии Окна терминала GNOME SIGHUP отправляется в оболочку, которую он выполнял. Оболочка будет обычно отправлять SIGHUP каждой группе процесса, что это знает, что создало - даже, запущенные с nohup - и затем выйдите. Если оболочка будет удар , то это пропустит отправку SIGHUP любой группе процесса, которую пользователь, отмеченный с , отрицает .

Выполнение команды с nohup заставляет его проигнорировать SIGHUP, но процесс может изменить это. Когда расположение SIGHUP для процесса является значением по умолчанию, затем если это получит SIGHUP, то процесс будет завершен.

Linux обеспечивает некоторые инструменты для исследования параметров настройки сигнала рабочего процесса.

сценарий оболочки браузера хрома делает должностное лицо из скомпилированного приложения, таким образом, его идентификатор процесса остается тем же. Таким образом для наблюдения его параметров настройки сигнала я работал nohup браузер хрома и и затем посмотрел /proc/$! / состояние для наблюдения расположения сигнала.

SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 0000000180014003

Это - шестнадцатеричные числа. Это показывает, что SIGHUP не пойман и не проигнорирован. Только SIGPIPE (13-й бит в SigIgn) проигнорирован. Я проследил это до следующего код :

// Setup signal-handling state: resanitize most signals, ignore SIGPIPE.
void SetupSignalHandlers() {
  // Sanitise our signal handling state. Signals that were ignored by our
  // parent will also be ignored by us. We also inherit our parent's sigmask.
  sigset_t empty_signal_set;
  CHECK(0 == sigemptyset(&empty_signal_set));
  CHECK(0 == sigprocmask(SIG_SETMASK, &empty_signal_set, NULL));

  struct sigaction sigact;
  memset(&sigact, 0, sizeof(sigact));
  sigact.sa_handler = SIG_DFL;
  static const int signals_to_reset[] =
      {SIGHUP, SIGINT, SIGQUIT, SIGILL, SIGABRT, SIGFPE, SIGSEGV,
       SIGALRM, SIGTERM, SIGCHLD, SIGBUS, SIGTRAP};  // SIGPIPE is set below.
  for (unsigned i = 0; i < arraysize(signals_to_reset); i++) {
    CHECK(0 == sigaction(signals_to_reset[i], &sigact, NULL));
  }

  // Always ignore SIGPIPE.  We check the return value of write().
  CHECK(signal(SIGPIPE, SIG_IGN) != SIG_ERR);
}

Несмотря на комментарий, сигналы, проигнорированные родителем, не проигнорированный. SIGHUP уничтожит хром.

обходное решение должно сделать то, на что указывает @xx4h: использовать эти , отрицают команда в вашем ударе так, чтобы, если удар должен выйти, он не отправлял SIGHUP в браузер хрома группа процесса. Можно записать функцию, чтобы сделать это:

mychromium () { /usr/bin/chromium-browser & disown $!; }
11
27.01.2020, 19:55

Хром кажется особенным.

NOHUP Chromium-Browser & Rever должен работать в этом случае. Смотрите также: https://stackoverflow.com/questions/11421810/nohup-doesnt-work-with-chromium

1
27.01.2020, 19:55

Если Chromium-браузер - это что-то вроде Google-Chrome , то я думаю, что наиболее вероятной проблемой состоит в том, что Chromium-браузер не Chromium Но вместо того, чтобы оболочка, которая инициализирует состояние EXEC S хром .

В моем Google Chrome Установка двоичной на самом деле находится в / opt / Google / Chrome и обертка в / usr / bin это просто Shell Script, который устанавливает много окружающей среды в отношении XDG - * по умолчанию, а также абсолютные пути и аналогичные, прежде чем заменять с помощью бинарной необходимости.

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

Попробуйте Файл / usr / bin / chromium-браузер , чтобы проверить, является ли это сценарий оболочки, я думаю, что это так. Если это так, рассмотрите возможность переписать его, чтобы лучше понять вас.

Я могу сказать, что просто делать Google-Chrome 2> / dev / null & держит его открытым для меня, но я не могу вспомнить, если это вероятный результат модификаций, которые я сделал в скрипте - Это было больше года назад.

3
27.01.2020, 19:55

Теги

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