2015-11-03 180 views
1

在Linux系统上,信号-KILLTERM发送一个允许应用程序安全关闭的信号。这些问题可能有点理论性,但我想了解它们。杀死-SIGTERM和KILLSIG:安全终止应用程序

  1. 当系统发送终止信号时,它发送到哪里?

  2. 允许过程或应用程序“安全”终止的时间是什么?

  3. 是否有一个子进程或类似的东西,在查找此信号的应用程序的后台运行?

这些问题从Linux看门狗干,在阅读手册页,我看到看门狗的过程是首先发送一个终止信号给定PID,然后使用kill -9信号给力了。我希望能够利用监视器内置的安全性。

+1

信号不杀人进程,人(和他们的进程)发送信号杀死进程。 – joop

+1

TERM信号可以被进程的信号处理程序捕获; KILL不能。因此,看门狗首先尝试发送SIGTERM并等待一段时间,因此任何使用自定义SIGTERM处理程序的进程都有时间执行它。 “安全”终止是由设计人员构建到应用程序中的东西。 –

回答

1

看到这个代码,

#include<stdio.h> 
#include<signal.h> 
#include<stdlib.h> 

void cleanUp(){ // Do whatever you want here 
    printf("Safely terminating \n"); 
} 

void hand(int sig){ // called when you are sent SIGTERM 
    /* 
    Here you can safely terminate.. 
    */ 
    atexit(cleanUp); // call cleanUp at exit. 
    exit(0); 
} 

int main(){ 
    signal(SIGTERM, hand); //Assign function to be called on SIGTERM 
    /* 
    Your code goes here. 
    I have put an infinite loop for demonstration. 
    */ 
    printf("Started execution..\n"); 
    for(;;); 
} 

这显示功能如何被分配到被调用时,信号传递到您的应用程序。

为了提供信号SIGTERM这段代码,为此,

kill -SIGTERM <pid> 

这里,<pid> ID您正在运行的程序的进程ID。

+1

请注意,您不应该在信号处理程序中使用printf()和朋友。 printf()不是信号安全的。 – joop

+0

@joop我同意。这只是为了证明所有这些都是OP所要求的。 –

+0

这是一个不好的证明,因为它证明不好的做法。 – joop