linux中如何注册一个信号

qq_40323387 2017-09-21 08:49:43
想办法一个进程p1注册SIGUSR1 另外一个进程p2向他发送SIGUSR1信号
在p1中捕获 SIGUSR1信号
...全文
227 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
千里醉逍遥 2017-09-22
  • 打赏
  • 举报
回复
或者使用 system("kill -USR1 3164"); kill -USR1 3164是命令行擦数,你试试 这种方式也可以。 或者你可以写个SOCKET,互相连接通信, 发送具体的协议,然后达到相同的目的。
千里醉逍遥 2017-09-22
  • 打赏
  • 举报
回复
发生信号的函数: kill()、raise()。 发送可以使用这个。
千里醉逍遥 2017-09-22
  • 打赏
  • 举报
回复

#include <signal.h>
void sigroutine(int dunno) { /* 信号处理例程,其中dunno将会得到信号的值 */
	switch (dunno) {
	case 1:
		printf("Get a signal -- SIGHUP  \n");
		break;
	case 2:
		printf("Get a signal -- SIGINT  \n");
		break;
	case 3:
		printf("Get a signal -- SIGQUIT  \n");
		break;
	case 11:
		printf("Get a signal -- 11  \n");
		break;
	default:
		printf("Get    %d \n", dunno);
		break;
	}
	return;
}

void initSignal()
{
#ifdef SIGINT
	signal(SIGINT, sigroutine);
#endif /* SIGINT */
#ifdef SIGSEGV
    signal(SIGSEGV, sigroutine);
#endif /* SIGSEGV */
#ifdef SIGBUS
	signal(SIGBUS, sigroutine);
#endif /* SIGBUS */ 
#ifdef SIGABORT
	signal(SIGABORT, sigroutine);
#endif /* SIGABORT */ 
#ifdef SIGABRT
	signal(SIGABRT, sigroutine);
#endif /* SIGABRT */ 
#ifdef SIGILL
	signal(SIGILL, sigroutine);
#endif /* SIGILL */ 
#ifdef SIGFPE
	signal(SIGFPE, sigroutine);
#endif /* SIGFPE */  
}

int main(int argc, char*argv[])
{
	initSignal();
	while(1)
	sleep(1);
	return 0;
}

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧