Я подключаюсь по ssh к серверу, чем запускаю задание (например, rsync), тогда я просто хочу иметь возможность выйти из системы и позволить заданию работать своим чередом. Но если я просто сделаю rsync ... &
Я думаю, что он все еще каким-то образом связан с tty, и что задание умирает, когда tty уходит при выходе из системы. Есть ли какой-нибудь (простой) способ отключить процесс от tty, чтобы иметь возможность выйти из системы без завершения процесса?
вы можете начать это в экран
nohup rsync ... &
Кажется, делаю именно то, что хочу.
Использовать setsid
и перенаправить дескрипторы 1 и 2 на /dev/null
.
например
setsid \
perl -e 'for ( my $i = 0; 1; $i++ ) { $0 = "forever $i"; sleep( 1 ); }' \
1>/dev/null \
2>/dev/null
Без setsid
и завершающий амперсанд команду ps ax
показывает:
13526 pts/4 S 0:00 forever 11
С участием setsid
и без конечного амперсанда команда ps ax
показывает:
13520 ? Ss 0:00 forever 68
... означает отсутствие подключенного TTY.
В Linux (по крайней мере, в Ubuntu) вы можете использовать start-stop-daemon
Если все, что вам нужно, это запустить процесс и оставить его запущенным, вы можете использовать
at now