在終端用kill命令殺死當前終端shell
r函數
如上, 使用 kill -SIGCONT 2563 時,終端忽略了該信號spa
使用 kill -SIGABRT 2563 時,終端退出。須要從新輸入用戶名密碼登錄。code
int kill (__pid_t __pid, int __sig) :向指定進程發送信號。第一個參數爲要傳遞信號的進程號,第二個參數爲發送的信號值。blog
int raise (int __sig) :給當前進程發一個信號,即喚醒一個進程.成功返回0,不然返回-1.進程
等價於rem
if(kill(getpid(), int __sig) == -1) perror("raise");
使用raise函數get
if(raise(SIGUSR1)!= 0) perror("Failed to raise SIGUSR1");
unsigned int alarm (unsigned int __seconds) :在指定時間內產生SIGALRM信號給當前進程。此函數每調用一次,產生一個信號,並非循環產生信號的。默認接收到該信號後進程終止執行。it
#include<signal.h> #include<stdio.h> int main(void) { printf("first time return: %d\n", alarm(4)); //4秒後生成ALARM信號 sleep(1); printf("after sleep(1), remain: %d\n", alarm(2)); printf("renew alarm, remain:%d\n", alarm(1)); }
__useconds_t ualarm (__useconds_t __value, __useconds_t __interval) :在第一個參數(單位:us)內產生SIGALRM信號,而後每一個指定時間(第二個參數,爲us爲單位)重複產生SIGALRM信號。執行成功,返回0.io
#include<unistd.h> #include<signal.h> #include<errno.h> #include<stdio.h> void handler() { printf("int:hello\n"); } int main() { int i; signal(SIGALRM, handler); printf("%d\n", ualarm(50, 20)); //會發送屢次信號 若是是alarm只發送一次信號 while(1) { sleep(1); printf("test\n"); } }
int usleep (__useconds_t __useconds):sleep函數的高精度版本
shell 命令 time 能夠計算某個進程運行時間。
如 time cat test.txt
real : 從執行到結束的時間
user : 進程用戶空間運行時間
sys : 進程在內核中運行時間
int getitimer(int which, struct itimerval * value):獲取定時器的相關信息
int setitimer(int which, const struct inimerval *value, struct itimerval *ovalue):設置定時器的相關信息
第一個參數:選擇哪一個定時器,有三個定時器可選
第二個參數類型聲明以下:
struct itimerval{ struct timeval it_interval; //間隔值 struct timeval it_value; //當前剩餘值 }; struct timeval{ long tv_sec; //s爲單位 long tv_usec; //ms爲單位 };
例子:
#include<stdio.h> #include<stdlib.h> #include<sys/time.h> #include<signal.h> int main(void) { struct itimerval setvalue; setvalue.it_interval.tv_sec = 3; setvalue.it_interval.tv_usec = 0; setvalue.it_value.tv_sec = 3; setvalue.it_value.tv_usec = 0; setitimer(ITIMER_REAL, &setvalue, NULL); setitimer(ITIMER_VIRTUAL, &setvalue, NULL); setvalue.it_value.tv_sec = 1; setitimer(ITIMER_PROF, &setvalue, NULL); while(1) { struct itimerval value; getitimer(ITIMER_REAL, &value); printf("ITIMER_REAL: internal:%ds%dms, remain:%ds%dms\n", value.it_interval.tv_sec, value.it_interval.tv_usec, value.it_value.tv_sec, value.it_value.tv_usec); getitimer(ITIMER_VIRTUAL, &value); printf("ITIMER_VIRTUAL: internal:%ds%dms, remain:%ds%dms\n", value.it_interval.tv_sec, value.it_interval.tv_usec, value.it_value.tv_sec, value.it_value.tv_usec); getitimer(ITIMER_PROF, &value); printf("ITIMER_PROF: internal:%ds%dms, remain:%ds%dms\n", value.it_interval.tv_sec, value.it_interval.tv_usec, value.it_value.tv_sec, value.it_value.tv_usec); sleep(1); } }
??爲何第二次和第三次的ITIMER_VIRTUAL的剩餘值有4187ms??比間隔值還大?
??爲何我設定的值是3s0ms可是會顯示3s187ms??