linux收到驱动信号sleep失效

controstr 2024-02-23 11:20:56

各位前辈,我在linux驱动中实现向应用程序发送一个信号后,应用程序中的sleep会被立即唤醒,请问这是为什么?

应用程序安装信号代码如下:

void axidev_handle(int signum, siginfo_t *info, void *context)
{
}

int main()
{

    int fd = open("/dev/axidev", O_RDWR | O_NONBLOCK);
    struct sigaction sa;
    sigemptyset(&sa.sa_mask);
    sa.sa_sigaction = axidev_handle;
	sa.sa_flags = SA_RESTART | SA_SIGINFO;
	sa.sa_restorer = NULL;

    ioctl(fd, IO_SETPID, getpid());
	sigaction(SIGUSR1, &sa, NULL);

    sleep(200);
    return 0;
}

驱动程序发送信号代码如下:

/*
标题:发送信号
参数:
   pid
       [in] 接收信号的进程ID
   signum
   	   [in] 要发送的信号
   code
   	   [in] 代码,可任意
 返回值:
*/
void axidev_send_signal(int pid, int signum, int code)
{
	struct task_struct *task = NULL;
	if ( 0 == pid )
		return;

	struct siginfo info;
	info.si_signo = signum;
	info.si_errno = 0x0;
	info.si_code = code;
	info.si_int = 0x8;

	rcu_read_lock();
	task = pid_task(find_vpid(pid), PIDTYPE_PID);
	rcu_read_unlock();

	if ( task )
	{
		send_sig_info(signum, &info, task);
	}

}

// 发送信号调用
axidev_send_signal(pDevInfo->pid, SIGUSR1, POLLIN);
// 或
axidev_send_signal(pDevInfo->pid, SIGUSR1, 100);

程序运行平台复旦微045或xilinx zynq 环境

...全文
225 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

23,124

社区成员

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

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