6

Я собираюсь запустить prog.cpp на кластере Linux моего университета (скомпилирован с gcc). Я предполагаю, что для завершения программы потребуется 3-6 дней. Я думал запустить его как

./prog &

запустить его в фоновом режиме. Мои вопросы:

  1. Безопасно ли мне просто закрыть окно терминала?
  2. Как я знаю, когда моя программа завершена? Могу ли я заставить GCC уведомить меня как-нибудь?

6 ответов6

12

Нет, ./prog & недостаточно: ваша программа будет убита, когда сессия закончится.

Вы можете использовать nohup:

nohup ./prog &

Более гибкий вариант - использовать screen GNU.

Что касается уведомлений по электронной почте, лично я написал бы двухстрочный сценарий оболочки, первая строка которого запускается ./prog на переднем плане, а вторая - с использованием mail для отправки уведомления. Затем скрипт может быть запущен с использованием nohup или в рамках сеанса screen .

2

Ваша программа не имеет ничего общего с GCC. Он был скомпилирован GCC, но вам не нужен GCC для его запуска (и вы могли бы скомпилировать его в другом месте).

ты можешь бежать

 nohup ./prog

но я действительно предлагаю использовать пакетную систему (представленную atd через batch или команды) , например ,

 batch << END
  ./prog
 END

atd dameon отправит вам электронное письмо, когда пакет будет завершен. С помощью команды at вы также можете указать час (при запуске программы).

1

Нет, обычно не безопасно выходить из окна терминала, когда у вас запущена фоновая программа, если вы хотите, чтобы эта фоновая программа продолжалась.

Причина в том, что когда вы выходите из терминала, вы обычно посылаете программе сигнал (обычно сигнал HANGUP, IIRC). Программы по умолчанию завершают работу, когда получают этот сигнал.

Как указано в другом ответе, попробуйте использовать программу nohup(1) или screen(1), которая позволяет отключиться (специально или случайно) и подключиться позже.

Что касается уведомления по электронной почте, попробуйте что-то вроде:

nohup sh -c 'prog; echo "all done" | mail -s results yourname@your.domain' &
0

Если вы можете запустить программу с помощью терминала zsh и запустить ее с помощью фоновой команды, вам не нужно беспокоиться о командах nohup или disown. Zsh - это заменяющая оболочка для ash или bash, и она имеет несколько полезных функций, например, более приятные цвета для запуска списка каталогов. Я часто использую его с lighttpd и командой background.

0
  1. Закрытие окна терминала небезопасно. Вы должны выполнить команду disown , это удалит прогу активных заданий. И программа не будет убита после закрытия окна терминала.
-1
  1. Если программа работает в фоновом режиме, я думаю, что это безопасно.
  2. Может быть, попробуйте ./prog && sendmail [opts, I don't now what but U can read documentation] &

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .