程序中获取进程号
FILE *fp;
char pid[20] = {0};
pid_t kill_pid;
fp = popen("ps -ef | grep XXX | grep -v grep | awk 'NR==1 {print $1}'","r");
int nread = fread(pid,1,1024,fp);
kill_pid = atoi(pid);
获取 进程名为“XXX”进程的进程id
进程间通信
进程A想进程B发送信号:
if (kill_pid > 0)
{
LogDbg("will kill pid = %d \n",kill_pid);//输出提示
if(kill(kill_pid, SIGUSR1) == -1)
{ //发送SIGKILL信号,杀死子进程
LogErr("fail to send signal\n");
return -1;
}
if(wait(NULL) ==-1)
{ //回收子进程状态,避免僵尸进程
LogErr("fail to wait\n");
return -1;
}
LogDbg("showLogo has been killed.\n");
}
else
{
LogDbg("kill_pid error %d \n",kill_pid);
}
进程B接收到信号处理
int sig_handler(int signum)
{
g_app_end_flag = 1;
return 0;
}
int setupSignalHandlers(void)
{
if(signal(SIGUSR1, sig_handler) == SIG_ERR)
printf("can not catch SIGUSR1\n");
return 0;
}