原型:
void ( *signal( int sig, void (* handler)( int ))) ( int );
符號名稱 | 信號代碼 | 描述 |
SIGHUP | 1 | 切斷(當通訊切斷時會送出) |
SIGINT | 2 | 中斷(一般為ctrl+c鍵) |
SIGQUIT | 3 | 中止(一般為ctrl+\鍵) |
SIGILL | 4 | 不合法的指令 |
SIGFPE | 8 | 錯誤的算術操作 |
SIGKILL | 9 | 去除 |
SIGSYS | 12 | 提供錯誤的引數給系統呼叫 |
SIGRTMIN | SIGRTMIN+x (x=0~15) | 自訂 |
aaa.c
#include <stdio.h> #include <stdlib.h> #include <signal.h> int send_sig(int sig) { FILE *pp=NULL; char stmp[256]; int pid=0; if((pp=popen("ps -e | grep bbb |awk '{print $1}'", "r"))!=NULL) { if (fgets(stmp, 20, pp)!=NULL) { pid=atoi(stmp); if (pid > 0) kill(pid, SIGRTMIN+sig); } } } int main (void) { int sig=0; printf("enter a signal (0~2):\n"); scanf("%d", &sig); send_sig(sig); return; }
bbb.c (需常駐)
#include <stdio.h> #include <stdlib.h> #include <signal.h> void BRI_0 () { printf("Hello World----0\n"); } void BRI_1 () { printf("Hello World----1\n"); } void BRI_2 () { printf("Hello World----2\n"); } int set_signal(void) { if(signal(SIGRTMIN+0, BRI_0) == SIG_ERR) return -1; if(signal(SIGRTMIN+1, BRI_1) == SIG_ERR) return -1; if(signal(SIGRTMIN+2, BRI_2) == SIG_ERR) return -1; return 0; } int main (void) { while(1) { if (set_signal() < 0) return -1; } }
在android下,
int pid= android.os.Process.myPid();
即可取得PID
沒有留言:
張貼留言