最近在写socket程序的时候发现服务器短使用Ctrl C用来结束一切正常,下次启动也是正常的。而使用Ctrl Z来结束时,发现再次启动时提示说地址已经被占用了,就是说那个端口不能启动新的服务了。
这时我的第一反应就是:是不是Ctrl Z结束有什么资源没有回收?
查了下才知道Ctrl Z并没有真正的退出,而只是将在前台执行的命令放到后台了,这是我使用socket客户端发送内容还是正常的,这个时候可以用jobs查看下后台运行的程序,显示是Running的。
这时用fg把后台运行的程勋放到前台来,回显什么都是正常的。
当在终端按Crtl+c 时向当前进程发送信号: SIGINT
当在终端输入kill id 杀死一个进程时,发送信号: SIGTERM
下面这个程序时验证上面的含义, 我把 SIGINT 和SIGTERM 信号全部截获下来了,
此时这个程序通过ctrl+c 和kill 是杀不死的.
#include <signal.h>
#include <stdio.h>
void func1()
{
printf(“SIGINT \n”);
}
void func2()
{
printf(“SIGTERM \n”);
}
int main()
{
signal (SIGINT, func1);
signal ( SIGTERM, func2);
while(1);
}
/****************************************************/
杀死一个或者一系列进程,通常先尝试最小危险的信号 SIGTERM。那样,