Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
启动时作为Linux守护进程运行Qt应用程序_Qt_Scripting_Startup_Daemon_Init.d - Fatal编程技术网

启动时作为Linux守护进程运行Qt应用程序

启动时作为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发行版上启动时在后台运行

我开发了一个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或它完全是控制台?它只是控制台,不需要任何用户输入。在这里给出更具体的示例会有所帮助。此外,请使用代码格式使您的文章更具可读性。