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,有个实例最好

谢谢指教
...全文
1718 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)
第一章 走进linux 1.1 GNU与Linux的成长 1.2 Linux的开发模式和运作机制 1.3走进Linux内核 1.4 分析Linux内核的意义 1.5 Linux内核结构 1.6 Linux内核源代码 1.7 Linux内核源代码分析工具 第二章 Linux运行的硬件基础 2.1 i386的寄存器 2.2 内存地址 2.3 段机制和描述符 2.4 分页机制 2.5 Linux中的分页机制 2.6 Linux中的汇编语言 第三章中断机制 3.1 中断基本知识 3.2中断描述符表的初始化 3.3异常处理 3.4 中断处理 3.5中断的后半部分处理机制 第四章 进程描述 4.1 进程和程序(Process and Program) 4.2 Linux中的进程概述 4.3 task_struct结构描述 4.4 task_struct结构在内存中的存放 4.5 进程组织的方式 4.6 内核线程 4.7 进程的权能 4.8 内核同步 第五章进程调度 5.1 Linux时间系统 5.2 时钟中断 5.3 Linux的调度程序-Schedule( ) 5.4 进程切换 第六章 Linux内存管理 6.1 Linux的内存管理概述 6.2 Linux内存管理的初始化 6.3 内存的分配和回收 6.4 地址映射机制 6.5 请页机制 6.6 交换机制 6.7 缓存和刷新机制 6.8 进程的创建和执行 第七章 进程间通信 7.1 管道 7.2 信号(signal) 7.3 System V 的IPC机制 第八章 虚拟文件系统 8.1 概述 8.2 VFS中的数据结构 8.3 高速缓存 8.4 文件系统的注册、安装与拆卸 8.5 限额机制 8.6 具体文件系统举例 8.7 文件系统的系统调用 8 .8 Linux2.4文件系统的移植问题 第九章 Ext2文件系统 9.1 基本概念 9.2 Ext2的磁盘布局和数据结构 9.3 文件的访问权限和安全 9.4 链接文件 9.5 分配策略 第十章 模块机制 10.1 概述 10.2 实现机制 10.3 模块的装入和卸载 10.4 内核版本 10.5 编写内核模块 第十一章 设备驱动程序 11.1 概述 11.2 设备驱动基础 11.3 块设备驱动程序 11.4 字符设备驱动程序 第十二章 网络 12.1 概述 12.2 网络协议 12.3 套接字(socket) 12.4 套接字缓冲区(sk_buff) 12.5 网络设备接口 第十三章 启动系统 13.1 初始化流程 13.2 初始化的任务 13.3 Linux 的Boot Loarder 13.4 进入操作系统 13.5 main.c中的初始化 13.6 建立init进程 附录: 1 Linux 2.4内核API 2.1 驱动程序的基本函数 2.2 双向循环链表的操作 2.3 基本C库函数 2.4 Linux内存管理中Slab缓冲区 2.5 Linux中的VFS 2.6 Linux的连网 2.7 网络设备支持 2.8 模块支持 2.9 硬件接口 2.10 块设备 2.11 USB 设备

23,216

社区成员

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

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