Следующий код работает для меня и, кажется, чтобы выполнить ваши требования -
Ac
#include<stdio.h>
int main()
{
int i=0;
printf("My PID is - %ld\n",getpid());
while(i>=0)
{
}
return 0;
}
Bc - процесс Трассировка
int main()
{
int pid;
int status;
struct user_regs_struct regs;
unsigned int eip;
printf("Enter pid to trace : \n");
scanf("%d",&pid);
printf("PID to be traced - %ld\n",pid);
ptrace(PTRACE_ATTACH,pid,0,0);
if(errno)
{
perror("attach");
return -1;
}
waitpid(pid,&status,WUNTRACED);
printf("Process Stopped\n");
while(1)
{
ptrace(PTRACE_GETREGS,pid,0,®s);
eip=ptrace(PTRACE_PEEKTEXT,pid,regs.eip,0);
printf("EIP - 0x%08x, instruction executed - 0x%08x\n",regs.eip,eip);
ptrace(PTRACE_CONT,pid,0,0);
waitpid(pid,&status,WUNTRACED);
}
return 0;
}
прошел сигнал -
убийство -STOP 17779 убийство -STOP 17779
Выход А -
xxxxx!xxxxx:~/myPer/stack_overflow [135]$ ./A
My PID is - 17779
Выход B -
XXXXX!xxxxx:~/myPer/stack_overflow [121]$ ./B
Enter pid to trace :
17779
PID to be traced - 17779
Process Stopped
EIP - 0x080483e1, instruction executed - 0x00f87d83
EIP - 0x080483e5, instruction executed - 0x00b8fa79
EIP - 0x080483e5, instruction executed - 0x00b8fa79
Мы видим, что В отображает значение EIP для каждый сигнал доставляется клиенту. В основном сигнал не доставляется A, а B пробуждается и анализирует EIP, а затем продолжает цикл. Вы можете изменить код, чтобы доставить сигнал, если хотите.
Это то, что я понял из вашего вопроса. Если я понял что-то еще, сообщите мне, и я буду отвечать соответствующим образом.
http://social.msdn.microsoft.com/Форумы/en/netfxtoolsdev/thread/4f21d7d8-d30e-4754-a0f6-dc2da3b75c40 релевантная ссылка для windows .. –
, пожалуйста, отправьте свой код – osgx
kill(), чтобы остановить, а PTRACE_CONT - это правильная комбинация. Большинство отладчиков используют SIGINT (вместо SIGSTOP), чтобы остановить процесс, вы можете попробовать это. Но я предполагаю, что вы сделали еще одну ошибку, вам придется опубликовать свой код. – Fabian