/*signalTest.c*/
#include <stdio.h>
#include <signal.h>
void handle(int signum)
{
if(signum==SIGUSR1)
{
printf("SIGUSR1\n");
}
else if(signum==SIGUSR2)
{
printf("SIGUSR2\n");
}
printf("call back run ...\n");
}
int main(int argc,char **argv)
{
signal(SIGUSR1, handle);
signal(SIGUSR2, handle);
printf("PID : %d\n",getpid());
while(1)
{
sleep(6000);
}
return 0 ;
}
/*genSignal.c */
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <dirent.h>
int getPidByName(const char* task_name)
{
DIR *dir;
struct dirent *ptr;
FILE *fp;
char filepath[50];
char cur_task_name[50];
char buf[1024];
int ret = -1;
dir = opendir("/proc");
if (NULL != dir)
{
while ((ptr = readdir(dir)) != NULL)
{
if((strcmp(ptr->d_name, ".") == 0)||(strcmp(ptr->d_name, "..") == 0))
continue;
if (DT_DIR != ptr->d_type)
continue;
sprintf(filepath, "/proc/%s/status", ptr->d_name);
fp = fopen(filepath, "r");
if (NULL != fp) {
if( fgets(buf, sizeof(buf)-1, fp)== NULL ){
fclose(fp);
continue;
}
}
sscanf(buf, "%*s %s", cur_task_name);
if (!strcmp(task_name, cur_task_name)){
fclose(fp);
ret = atoi(ptr->d_name);
}
}
closedir(dir);
}
return ret;
}
int main(int argc,char **argv)
{
printf("signalTest : %d\n",getPidByName("signalTest"));
char cmd[128];
sprintf(cmd,"kill -s USR1 %d",getPidByName("signalTest"));
system(cmd);
}
编译:
gcc signalTest.c -o signalTest
gcc genSignal.c -o genSignal
运行:
#./signalTest&
[2] 3569
root@ubuntu:/home/nfs/test# PID :3569
# ./genSignal
signalTest : 3569
SIGUSR1
call back run ...