我如何让我的Golangnetworking服务器在后台运行?

我最近完成了Wiki Web开发教程(http://golang.org/doc/articles/wiki/)。 我有很多的乐趣,我想实验更多的净/ http包。

但是,我注意到,当我从控制台运行wiki时,wiki接pipe了控制台。 如果我closures控制台terminal或用ctrl + z停止进程,则服务器停止。

我怎样才能让服务器在后台运行? 我认为这个术语是在一个守护进程中运行的。

我在Ubuntu 12.04上运行这个。 谢谢你的帮助。

简单/可用的东西第一

如果你想要一个启动脚本没有太多的努力,你可以使用upstart服务。 有关示例,请参见相应的手册页和/etc/init/*.conf 。 创build这样一个过程后,您可以通过调用启动您的服务器

 service myserver start 

如果你想要更多的function,如特定的限制或权限pipe理,你可以尝试xinetd

使用shell

你可以像这样开始你的过程:

 nohup ./myexecutable & 

&告诉shell在后台启动命令,将其保存在作业列表中。 在某些shell中,如果父shell使用HANGUP信号退出,则作业会被终止。 为了防止这种情况发生,可以使用nohup命令启动命令, nohup命令丢弃HANGUP信号。

但是,如果被调用的进程重新连接HANGUP信号,这不起作用。

要确定,你需要从shell的工作列表中删除这个进程。 对于两个众所周知的炮弹,可以这样做:

庆典:

 ./myexecutable & disown <pid> 

zsh的:

 ./myexecutable &! 

杀死你的后台工作

通常情况下,shell会打印进程的PID,然后使用kill命令将其终止,以停止服务器。 如果你的shell不打印PID,你可以使用它

 echo $! 

直接执行后。 这将打印分叉进程的PID。

您可以使用Supervisord来pipe理您的stream程。

Ubuntu的? 使用upstart

/etc/init为您的作业创build一个名为your-service-name.conf

 start on net-device-up exec /path/to/file --option 

您可以使用start your-service-name ,以及: stoprestartstatus