- 論壇徽章:
- 0
|
假設(shè)自己寫(xiě)一個(gè)服務(wù)程序,開(kāi)機(jī)后自動(dòng)運(yùn)行,是一個(gè)后臺(tái)服務(wù)程序。
如果其它用戶通過(guò)其它命令(比如root用戶輸入reboot命令)或其它程序要關(guān)閉計(jì)算機(jī),我的程序會(huì)收到SIGTERM信號(hào),但捕捉不到SIGKILL信號(hào),收到SIGTERM信號(hào)后如何開(kāi)始保存自己的數(shù)據(jù)到磁盤(pán)上呢?
我的測(cè)試代碼如下:
- /************然后我來(lái)專門(mén)處理關(guān)機(jī)時(shí)收到的信號(hào)15**********************/
- #include <signal.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- void sighandler(int);
- int main(int argc, char ** argv)
- {
- int x = 0;
- signal(SIGTERM, sighandler);
- signal(SIGQUIT, sighandler);
- while(1) {
- /*printf("now %d\n", x++);*/
- usleep(100);
- }
- }
- void sighandler(int sig)
- {
- FILE * fp;
- int x = 0;
- fp = fopen("haltsignal.txt", "a+");
- if(!fp) return;
- fprintf(fp, "signal.%d received, now begin to save data:\n", sig);
- for(x = 1; x <= 5; x++) {fprintf(fp, "save data.%d\n", x); fflush(fp);}
- fclose(fp);
- }
復(fù)制代碼
當(dāng)這個(gè)程序運(yùn)行起來(lái),在另一個(gè)終端輸入reboot命令,然后再看haltsignal.txt卻沒(méi)有內(nèi)容。 |
|