是否有一种简单的方法可以将一个简单的任务守护进程化?

是否有一种简单的方法可以将一个简单的任务守护进程化?

我通过 ssh 进入服务器,然后启动一项作业(例如 rsync),然后我只想能够从服务器注销并让作业自行运行。但如果我只是这样做,rsync ... &我认为它仍然以某种方式连接到 tty,并且当注销时 tty 消失时作业就会终止。有没有(简单的)方法可以将进程与 tty 断开连接,以便能够在不终止进程的情况下注销?

答案1

你可以从屏幕

答案2

nohup rsync ... &

似乎正是我想要的。

答案3

使用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。

答案4

Debian 和 Ubuntu 有一个名为守护进程这似乎是自由松弛项目。

相关内容