在Linux系統上,信號-KILLTERM發送一個允許應用程序安全關閉的信號。這些問題可能有點理論性,但我想了解它們。殺死-SIGTERM和KILLSIG:安全終止應用程序
當系統發送終止信號時,它發送到哪裏?
允許過程或應用程序「安全」終止的時間是什麼?
是否有一個子進程或類似的東西,在查找此信號的應用程序的後臺運行?
這些問題從Linux看門狗幹,在閱讀手冊頁,我看到看門狗的過程是首先發送一個終止信號給定PID,然後使用kill -9信號給力了。我希望能夠利用監視器內置的安全性。
在Linux系統上,信號-KILLTERM發送一個允許應用程序安全關閉的信號。這些問題可能有點理論性,但我想了解它們。殺死-SIGTERM和KILLSIG:安全終止應用程序
當系統發送終止信號時,它發送到哪裏?
允許過程或應用程序「安全」終止的時間是什麼?
是否有一個子進程或類似的東西,在查找此信號的應用程序的後臺運行?
這些問題從Linux看門狗幹,在閱讀手冊頁,我看到看門狗的過程是首先發送一個終止信號給定PID,然後使用kill -9信號給力了。我希望能夠利用監視器內置的安全性。
看到這個代碼,
#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。
信號不殺人進程,人(和他們的進程)發送信號殺死進程。 – joop
TERM信號可以被進程的信號處理程序捕獲; KILL不能。因此,看門狗首先嚐試發送SIGTERM並等待一段時間,因此任何使用自定義SIGTERM處理程序的進程都有時間執行它。 「安全」終止是由設計人員構建到應用程序中的東西。 –