Есть ли какой-либо конфликт между nohup и mpirun?

Я хочу запустить большое моделирование на настольном компьютере человечности. Я имею физический (не удаленный) доступ к этому ПК. Это моделирование может занять несколько недель. Команда для запуска процесса:

mpirun -np 100 icoFoam -parallel | tee log

Где icoFoam является исполняемым файлом, и параллель необходима как ее опция.
Эта команда печатает данные в терминале. Несколько раз терминал закрывается, или ОС выходится из системы случайным образом во время долгих моделирований и из-за этого, процесс завершается. Я пытался понять это несколькими альтернативными командами:

 nohup mpirun -np 100 icoFoam -parallel > log  & 
 nohup mpirun -np 100 icoFoam -parallel > log  & disown & 
 nohup mpirun -np 100 icoFoam -parallel | tee log & disown & 
 nohup mpirun -np 100 icoFoam -parallel | tee log & disown & > /dev/null 2>& 1 & nohup mpirun -np 100 icoFoam -parallel > /dev/null 2>& 1  &
 systemd-run --scope --user mpirun -np 100 icoFoam -parallel | tee log &
 systemd-run --scope --user mpirun -np 100 icoFoam -parallel | tee log & disown &
 systemd-run --scope --user nohup mpirun -np 100 icoFoam -parallel | tee log & disown &
 tmux

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

Мои результаты
1-Как самое простое обходное решение, я смешал nohup, и отрицайте (отсюда).
2-я предположил, что команды включая мишень, завершаются из-за SIGPIPE, вызванного путем закрытия терминала (отсюда). Поэтому я привык перенаправление для файла журнала или/dev/null (отсюда), оба из которых были также завершены путем закрытия терминала.
3-я также исследовал systemd-run. Но это также завершается путем закрытия терминала.
4-, Чтобы видеть, установила ли программа свой собственный обработчик, я выполнил это:

nohup mpirun -np 100 icoFoam -parallel > log  &
grep Sig /proc/$!/status

Который возвращается

SigIgn: 0000000000000000

Поэтому я предполагаю дело обстоит так, т.е. mpirun установил его собственный обработчик, переопределяющий защиту nohup (отсюда).
5-я не знаю, возможно ли отправить пользовательский обработчик в mpirun для не переопределения nohup.

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

mpirun -np 100 icoFoam -parallel

ОС: человечность 18.04
Исполняемый файл: OpenFOAM
mpirun (Открывают MPI): 2.1.1

Обновление
Выходят из системы, я означаю нажимать, выходят из системы кнопка (изображение), не Lockscreen (super+L) enter image description here

Заранее спасибо.

0
задан 25 January 2020 в 15:56

3 ответа

Проблема состоит в том, что Вы запускаете задание из настольной среды, таким образом, задания являются детьми того рабочего стола. Когда рабочий стол заканчивается по любой причине, все дети автоматически заканчивают, также. 'nohup' не сохранит их - выход из системы удаляет дисплей, которые производят, должен распечатать к, который должен также вызвать фатальную ошибку.

Рассмотрите выполнение tmux в tty вместо окна терминала. Затем процесс может работать навсегда независимо от того, что делает рабочий стол.

0
ответ дан 30 January 2020 в 23:30

У меня такая же конфигурация (Ubuntu 18.04, OpenFoam v7, Open MPI 2.1.1), и я сталкиваюсь с теми же проблемами. Единственным решением, которое помогло, были шаги, описанные в этом посте:

  1. Запустите оконный менеджер из консоли, используя экран и нажмите Enter.
  2. Затем в экранной консоли вы можете вводить команды в соответствии с вашими потребностями, с. е.

    nohup mpirun -np 100 icoFoam -parallel > log &
    
  3. Нажмите CtrlA и CtrlD, чтобы «прикрепить» терминал к созданному «экрану».

  4. Теперь вы сможете закрыть окно терминала, не убивая процессы mpi.
  5. Чтобы вернуться к экрану, откройте новый терминал и введите screen -DR. Должен открыться последний экран.
  6. На экране введите exit, если вы хотите закрыть экран.

Примечание: если вы создали более одного экрана, экран -DR показывает список со всеми сеансами экрана. Введите screen -r [номер сеанса] для перехода к экрану или screen -X -S 63896 quit для выхода из экрана. Это немного неуклюжий обходной путь, но я надеюсь, что он поможет, с нетерпением ожидая, что эта ошибка (или функция?) будет устранена в будущих версиях.

Для получения дополнительной информации см. главный экран.

1
ответ дан 21 April 2020 в 11:14

A второй способ — использовать setsid для запуска mpirun в новом сеансе. Преимущество заключается в том, что этот сеанс не прерывается при закрытии терминала (сигнал отбоя, SIGHUP), как предлагается в целом здесь и, в частности, здесь. . Синтаксис прост:

setsid mpirun -np 100 icoFoam -parallel > log &

Чтобы завершить mpirun вручную по любой причине, завершите один из процессов icofoam. с htop, нажмите F9 и отправьте SIGKILL, нажав 9. Все остальные процессы icofoam и процесс mpirun также должны быть уничтожены. В качестве альтернативы введите killall mpirun, как предложено здесь.

1
ответ дан 22 April 2020 в 10:10

Другие вопросы по тегам:

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