在我的公司,我看到使用killall -9
来杀死守护进程,然后再次启动它们。 (这应该是killall -SIGKILL
)
我试图向同事解释这不应该是我们重启守护进程的方式。也许使用SIGINT
符号以便进程可以正确关闭或使用init.d
脚本正确地重新启动服务。
我们在C
进行编程,那么是否有任何可能会因为SIGKILL
而对系统造成损害的事情?显然这个信号不能被进程捕获,所以没有内部信号处理程序可以做任何好的关机处理,但是
我能猜出这些问题的答案,但是有没有人知道的答案?任何人都可以利用他们的Unix知识来帮助我吗?凭借具体的知识,我可以提出更好的论点!
答案 0 :(得分:2)
一个。读/写缓冲区。这是一个简单的实验,希望能够向同事“证明”异常终止是不好的。执行这个perl脚本,当它处于休眠状态时,kill -9
它:
#!/usr/bin/perl
open FILE, ">file.txt" or die $!;
print FILE "This is it";
sleep 100;
close FILE;
在我的机器上,如果我在'close'=>之前杀了,file.txt
为空看起来像异常终止可能意味着数据丢失。更多关于这个问题的接受答案:
What happens if I don't call fclose() in a C program?
湾动态分配的内存已释放。这基本上是程序内存空间中的一块内存,称为“堆”。程序请求OS根据动态分配调整堆大小,并且OS知道该块的限制。即使在程序的干净exit
上,如果它有内存泄漏,也会回收此内存。