Здравсте!
Не проходят сигналы приложению при трассировке. Те не вызывается обработчик в трассируемом приложении:
sigtest.c:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <syscall.h>
#include <sys/wait.h>
#include <unistd.h>
#include <errno.h>
void sig_handler(int signum) {
	write(1,"SIG\n",4);
	sleep(1);
}
void main() {
	signal(15, sig_handler);
	sleep(20);
	return;
}
dbgr.c:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <syscall.h>
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <errno.h>
#include <sys/user.h>
#include <inttypes.h>
int main(int argnum,char ** args) {
	int pid=atoi(args[1]);
	ptrace(PTRACE_ATTACH,pid, 0, 0);
	
	struct user_regs_struct regs;
	int wait_stat; 
	int rsig;
	 
	waitpid(pid,&wait_stat,0);
	while (WIFSTOPPED(wait_stat)) {
		ptrace(PTRACE_GETREGS,pid, 0,®s);
		
		rsig=WSTOPSIG(wait_stat);
		dprintf(2," \n %d %"PRIx64"\n",rsig,regs.rip);
	
		if (ptrace(PTRACE_SINGLESTEP, pid, 0, 0) != 0) {perror("ptrace_singlestep"); return -1;};
		waitpid(pid,&wait_stat,0);
	}
}
Если запустить sigtest и в течении 20 секунд подключится к нему через dbgr, а затем отправить сигнал 15 процессу sigtest, то он его проигнорирует, хотя dbgr выведет сообщение
5 7fc478feb2f0
 
15 7fc478feb2f0
Собственно вопрос: как можно пропустить сигнал в приложение, не останавливая трассировку?


