linux中的Ctrl+C的

        最近在写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
#include
void func1()
{
printf(“SIGINT \n”);
}
void func2()
{
printf(“SIGTERM \n”);
}
int main()
{
signal (SIGINT, func1);
signal ( SIGTERM, func2);
while(1);
}
/****************************************************/
杀死一个或者一系列进程,通常先尝试最小危险的信号 SIGTERM。那样,
关心按次序关机的程序得到设计来执行当收到类似清理关闭打开文件的 SIGTERM 信号。
如果你向一个进程发送一个 SIGKILL 信号,你就把进程在关闭前进行清理工作的机会给剥夺了,
可能造成意想不到的后果.

可以用java中 执行linux命令的方式来执行:

Process proc = Runtime.getRuntime().exec("ctrl+c");
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
// 记录执行命令ctrl+c后得到的输出流
while ((line = br.readLine()) != null) {
logger.debug(line);
}
// 等待进程结束
proc.waitFor(); 

你可能感兴趣的:(Linux学习,Linux)