Я хочу запустить большое моделирование на настольном компьютере человечности. Я имею физический (не удаленный) доступ к этому ПК. Это моделирование может занять несколько недель. Команда для запуска процесса:
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)
Заранее спасибо.
Проблема состоит в том, что Вы запускаете задание из настольной среды, таким образом, задания являются детьми того рабочего стола. Когда рабочий стол заканчивается по любой причине, все дети автоматически заканчивают, также. 'nohup' не сохранит их - выход из системы удаляет дисплей, которые производят, должен распечатать к, который должен также вызвать фатальную ошибку.
Рассмотрите выполнение tmux в tty вместо окна терминала. Затем процесс может работать навсегда независимо от того, что делает рабочий стол.
У меня такая же конфигурация (Ubuntu 18.04, OpenFoam v7, Open MPI 2.1.1), и я сталкиваюсь с теми же проблемами. Единственным решением, которое помогло, были шаги, описанные в этом посте:
экран
и нажмите Enter. Затем в экранной консоли вы можете вводить команды в соответствии с вашими потребностями, с. е.
nohup mpirun -np 100 icoFoam -parallel > log &
Нажмите CtrlA и CtrlD, чтобы «прикрепить» терминал к созданному «экрану».
mpi
. screen -DR
. Должен открыться последний экран. exit
, если вы хотите закрыть экран. Примечание: если вы создали более одного экрана, экран -DR
показывает список со всеми сеансами экрана. Введите screen -r [номер сеанса]
для перехода к экрану или screen -X -S 63896 quit
для выхода из экрана.
Это немного неуклюжий обходной путь, но я надеюсь, что он поможет, с нетерпением ожидая, что эта ошибка (или функция?) будет устранена в будущих версиях.
Для получения дополнительной информации см. главный экран
.
A второй способ — использовать setsid
для запуска mpirun
в новом сеансе. Преимущество заключается в том, что этот сеанс не прерывается при закрытии терминала (сигнал отбоя, SIGHUP
), как предлагается в целом здесь и, в частности, здесь. . Синтаксис прост:
setsid mpirun -np 100 icoFoam -parallel > log &
Чтобы завершить mpirun
вручную по любой причине, завершите один из процессов icofoam
. с htop
, нажмите F9 и отправьте SIGKILL
, нажав 9. Все остальные процессы icofoam
и процесс mpirun
также должны быть уничтожены. В качестве альтернативы введите killall mpirun
, как предложено здесь.