在子进程中使用kill的陷阱信号?

时间:2013-12-23 06:08:30

标签: c signals shared-memory

在Linux上工作,我希望在子进程中使用kill捕获我发送的信号,然后打印循环,但我不知道如何。

我似乎无法获取捕获信号的代码。

到目前为止,这是我的代码:

#include <stdio.h>
#include <signal.h>
#include <sys/types.h> 
#include <sys/ipc.h> 
#include <sys/shm.h> 

int SHMSIZE = 9;
int alarmFlag = 0;

void main()
{
 int shmid; 
 int *shm; 
 pid_t pid = fork();

 if(pid == 0) {
  pause();
  shmid = shmget(4000, SHMSIZE, 0);
  shm = shmat(shmid,0,0);

  int i;
  for(i=0;i<SHMSIZE;i++)
   printf("<%d , ",shm[i]);
 }
 else
 {
   int *n;
   shmid = shmget(4000,SHMSIZE,0666 | IPC_CREAT);
   shm = shmat(shmid,0,0);
   n = shm;  

   int i;
   for(i=0;i<SHMSIZE;i++)
    n[i] = i;

   int result = kill(pid, SIGUSR1); 
   wait(NULL);  
 }
}

1 个答案:

答案 0 :(得分:0)

程序中的pause()本身并没有发出信号,它只是在信号传递之前一直睡觉,但是如果没有捕获到该信号(使用sigaction()或者signal(),正如Jonathan Leffler所写的那样,它终止了这个过程。所以,你必须添加e。 G。 signal(SIGUSR1, catch);

之前的pause();
void catch(int signum) { }
main()之前