linux下 编写服务程序

风声边界 2010-06-11 01:58:33
想写linux的服务程序,网上盛传一个简短的linux服务程序,
大致是:写个程序编译成可执行程序,然后再在/etc/init.d下放一个脚本文件,这个文件里面包含了服务启动、关闭、重启等的函数实现,
........
start()
{
/home/projects/testService/testService &
exit 0;
}
stop()
{
pkill testService
}
....

这能叫服务程序吗?
有如下疑问:
1,服务程序和守护进程间有没有关系
2,服务程序结束能直接pkill吗?
3\如何正确的编写一个linux下的服务程序,并实现其正常的开启和终止
4,有个实例最好

谢谢指教
...全文
1712 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
风声边界 2010-06-12
  • 打赏
  • 举报
回复
我测试了正如ecsape所说
谢谢,
基本搞定,现在结贴
ecsape 2010-06-12
  • 打赏
  • 举报
回复
是的,kill -s signal 指定信号。
我说的是一般kill pid这种什么参数都不加时,是SIGTERM。

[Quote=引用 36 楼 weihua1984 的回复:]

好像是可以用kill 指定发出的信号
[/Quote]
风声边界 2010-06-12
  • 打赏
  • 举报
回复
好像是可以用kill 指定发出的信号
ecsape 2010-06-12
  • 打赏
  • 举报
回复
现在是我的程序开启了好多线程。我想在kill时程序捕获信号然后终止线程并回收资源
用signal函数时不能捕获SIGKILL、SIGSTOP信号
撒办?
signal函数是捕获进程信号的
你仔细看看我发给你的链接,SIGKILL、SIGSTOP信号是不能捕获的,一般捕获退出信号是SIGHUP和SIGTERM。
sighup一般是你在终端运行程序,按Ctrl-c时产生的
sigterm一般是用kill进程时时产生的




还有21bird说:
除了信号量,共享内存等RPC机制在退出后系统不会自动回收外,其他都会自动回收。

是不是在我的程序中还没有来得及delete 才close的都可以自动回收,
是的,但是最好是自己回收
hfCoder 2010-06-12
  • 打赏
  • 举报
回复
不懂,帮顶
风声边界 2010-06-12
  • 打赏
  • 举报
回复
现在是我的程序开启了好多线程。我想在kill时程序捕获信号然后终止线程并回收资源
用signal函数时不能捕获SIGKILL、SIGSTOP信号
撒办?

还有21bird说:
除了信号量,共享内存等RPC机制在退出后系统不会自动回收外,其他都会自动回收。

是不是在我的程序中还没有来得及delete 才close的都可以自动回收,
程序中肯定有信号量,这个又该如何处理?
pope_key 2010-06-11
  • 打赏
  • 举报
回复
楼主,该结帖了
jbz001 2010-06-11
  • 打赏
  • 举报
回复
只是路过,顺便帮你顶一下啊~!
hfCoder 2010-06-11
  • 打赏
  • 举报
回复
不懂,up
filec75 2010-06-11
  • 打赏
  • 举报
回复
mark
filec75 2010-06-11
  • 打赏
  • 举报
回复
友情up
ecsape 2010-06-11
  • 打赏
  • 举报
回复
signal(SIGHUP,exithandle);
exithandle是退出时的处理函数
具体你要处理哪些信号,可以参考下面链接
http://hi.baidu.com/cchaha0227/blog/item/516636aff64a21f3fbed50d6.html

[Quote=引用 21 楼 weihua1984 的回复:]

我的程序一直
new 。open等kill的话会不会占用资源而不释放
,有人说是可以用信号,共享内存,通知函数清理数据
[/Quote]
风声边界 2010-06-11
  • 打赏
  • 举报
回复
ecsape给个例子哦
pope_key 2010-06-11
  • 打赏
  • 举报
回复
http://libslack.org/
楼主好好看看这个库,
ecsape 2010-06-11
  • 打赏
  • 举报
回复
被叫走开会了,刚试验了下,确实是需要守护进程的。看来还是我理解错了,又没测试过。
风声边界 2010-06-11
  • 打赏
  • 举报
回复
我的程序一直
new 。open等kill的话会不会占用资源而不释放
,有人说是可以用信号,共享内存,通知函数清理数据
steptodream 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 weihua1984 的回复:]

熊猫。你的shell中用的也是kill,这样做好吗?
[/Quote]
你可以看一下/etc/init.d/下的启动脚本 基本上都是用kill
这里的killproc是/etc/rc.d/init.d/functions里的一个函数 函数里也使用的kill
风声边界 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 21bird 的回复:]
可以用pkill关闭服务,但是……你要在程序里实现对关闭信号的响应来清理现场。
[/Quote]

这个如何实现
风声边界 2010-06-11
  • 打赏
  • 举报
回复
熊猫。你的shell中用的也是kill,这样做好吗?
steptodream 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 21bird 的回复:]

引用 9 楼 ecsape 的回复:

如果像这样做,那么程序里面其实并不需要实现守护进程的。


好像还是需要的,偶曾经在调试时屏蔽了守护进程代码,结果service start后,没有让出终端,一直在前台运行。
[/Quote]
我一开始就是没用守护进程的代码 可是启动之后就在终端运行 一直在前台运行
可是我加了之后 正常的启动关闭等等 表面看上去和别的服务一样的
不知道实际上是否一样
加载更多回复(15)

23,209

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧