linux下的signal()函数
来源:互联网 发布:知乎的神回答 编辑:程序博客网 时间:2024/04/28 14:54
相关资料:http://www.360doc.com/content/12/0927/10/7534118_238403050.shtml
http://blog.sina.com.cn/s/blog_4b226b92010119l5.html
http://www.cnblogs.com/hoys/archive/2012/08/19/2646377.html#top
当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。根据信号的默认处理规则SIGPIPE信号的默认执行动作是terminate(终止、退出), 所以client会退出。
若不想客户端退出可以把 SIGPIPE设为SIG_IGN
如:
服务器采用了fork的话,要收集垃圾进程,防止僵死进程的产生,可以这样处理:
signal(SIGCHLD,SIG_IGN); 交给系统init去回收。这里子进程就不会产生僵死进程了。
signal(SIGHUP, SIG_IGN);
signal信号函数,第一个参数表示需要处理的信号值(SIGHUP),第二个参数为处理函数或者是一个表示,这里,SIG_IGN表示忽略SIGHUP那个注册的信号。
SIGHUP和控制台操作有关,当控制台被关闭时系统会向拥有控制台sessionID的所有进程发送HUP信号,默认HUP信号的action是exit,如果远程登陆启动某个服务进程并在程序运行时关闭连接的话会导致服务进程退出,所以一般服务进程都会用nohup工具启动或写成一个daemon。
unix中进程组织结构为 session 包含一个前台进程组及一个或多个后台进程组,一个进程组包含多个进程。
一个session可能会有一个session首进程,而一个session首进程可能会有一个控制终端。
一个进程组可能会有一个进程组首进程。进程组首进程的进程ID与该进程组ID相等。
这儿是可能会有,在一定情况之下是没有的。
与终端交互的进程是前台进程,否则便是后台进程
SIGHUP会在以下3种情况下被发送给相应的进程:
1、终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 &符号提交的进程)
2、session首进程退出时,该信号被发送到该session中的前台进程组中的每一个进程
3、若父进程退出导致进程组成为孤儿进程组,且该进程组中有进程处于停止状态(收到SIGSTOP或SIGTSTP信号),该信号会被发送到该进程组中的每一个进程。
系统对SIGHUP信号的默认处理是终止收到该信号的进程。所以若程序中没有捕捉该信号,当收到该信号时,进程就会退出。
- linux下的signal()函数
- linux下signal函数
- linux编程下signal()函数
- linux编程下signal()函数
- Linux 下设置时间间隔的Signal函数
- linux编程下signal()函数
- linux编程下signal()函数
- linux编程下signal()函数
- linux编程下signal()函数
- linux编程下signal()函数
- linux编程下signal()函数
- linux编程下signal()函数
- Linux Signal (2): signal函数
- Linux Signal (2): signal函数
- Linux Signal (2): signal函数
- 让你费解的函数原型 - linux 下的 signal - 函数指针
- ubuntu下signal()函数的行为
- Linux signal 函数的常用功能分析
- 【机器学习基础】生成模型和判别模型
- 网络字节序与主机字节序
- java内存区域--运行时数据区域
- 解决:keil报错invalid redeclaration of type name "s32"
- select2 及tree用法,直接代码
- linux下的signal()函数
- 【机器学习基础】机器学习基础引入
- bootstrap-datetimepicker 时间选择
- 2016 知识点汇总 mindmap
- .Net 中的反射(查看基本类型信息)
- 高效程序员的10个习惯
- 无符号序列号溢出问题
- 高端网站建设中多语言网站本地化的实用技巧
- svm简介