启动时作为Linux守护进程运行Qt应用程序
我开发了一个Qt应用程序,其中包含TCP服务器等。我现在正在尝试制作Ubuntu软件包,让应用程序在启动时自动启动 即使没有人登录,应用程序也需要运行,这意味着守护进程是通过/etc/init.d中的脚本启动的/ 我尝试在init.d脚本中简单地在start时运行应用程序,在stop时发送kill信号,但这意味着应用程序在前台运行并阻止init脚本 几乎可以正常工作,我在尝试启动TCP服务器后出现“未知错误”。不过,应该有一种简单的方法来编写init脚本,在各种Linux发行版上启动时在后台运行我的应用程序 谁能给我指一下正确的方向吗启动时作为Linux守护进程运行Qt应用程序,qt,scripting,startup,daemon,init.d,Qt,Scripting,Startup,Daemon,Init.d,我开发了一个Qt应用程序,其中包含TCP服务器等。我现在正在尝试制作Ubuntu软件包,让应用程序在启动时自动启动 即使没有人登录,应用程序也需要运行,这意味着守护进程是通过/etc/init.d中的脚本启动的/ 我尝试在init.d脚本中简单地在start时运行应用程序,在stop时发送kill信号,但这意味着应用程序在前台运行并阻止init脚本 几乎可以正常工作,我在尝试启动TCP服务器后出现“未知错误”。不过,应该有一种简单的方法来编写init脚本,在各种Linux发行版上启动时在后台运行
将Ubuntu9.10与Qt4.5一起使用,你的程序是GUI应用程序还是没有GUI就可以工作
为什么不在init脚本中使用&?作为背景呢?根据默认运行级别,您需要在/etc下的任何rc?.d目录中添加一个符号链接。或者使用updaterc.d脚本:首先需要在/etc/init.d中创建一个脚本来执行应用程序;其次,使用updaterc.d脚本添加启动所需的文件 通过阅读更新rc.d手册页面,您可以找到有关如何执行此操作的信息:
$man update-rc.d
最好的方法可能是在为您处理分叉工作的地方使用 但是,如果您想继续构建自己的应用程序,您应该将应用程序设置为后台,或者通过发行版附带的或类似的实用程序来运行它 此外,请确保仅链接到QtCore共享库。尽管应用程序可能是命令行的,并且从不启动GUI,但这并不意味着应用程序运行时不需要X。例如,一组单元测试:
$ ldd runTests | grep Qt
libQtTest.so.4 => /usr/lib/qt4/libQtTest.so.4 (0x00007fd424de9000)
libQtXml.so.4 => /usr/lib/qt4/libQtXml.so.4 (0x00007fd424baa000)
libQtGui.so.4 => /usr/lib/qt4/libQtGui.so.4 (0x00007fd4240db000)
libQtCore.so.4 => /usr/lib/qt4/libQtCore.so.4 (0x00007fd422644000)
由于存在QtGui,所有的X库也会被引入,尽管它们是从上面的输出中过滤出来的。我认为最简单的方法是在应用程序本身中没有任何daemonize逻辑,而是使用帮助程序在后台启动应用程序并为其管理pid
例如,.您可以查看
/etc/init.d
中已有的许多脚本以获得灵感。据我所见,大多数标准linux守护程序的启动依赖于startproc
,停止依赖于killproc
。您是否提供了任何gui或它完全是控制台?它只是控制台,不需要任何用户输入。在这里给出更具体的示例会有所帮助。此外,请使用代码格式使您的文章更具可读性。