unix 使用处理程序函数向子进程发送信号

ny6fqffe  于 2022-11-04  发布在  Unix
关注(0)|答案(1)|浏览(179)

父进程必须在报警后向子进程发送SIGKILL信号。我必须通过更改SIGALARM的处理函数来完成此操作,但我不知道如何将子进程作为参数传递给处理函数。

void mi_handler(int num)
{
    kill(getpid(),SIGKILL);
}
int main(int argc, char* argv[])
{
    pid_t pid;

    pid = fork();
    if(pid == 0)
    {   
        alarm(5);
        execvp(argv[1], &argv[1]);   
    }

    struct sigaction act;
    act.sa_handler = mi_handler;
    sigaction(SIGALRM,&act,NULL);

  return(0);
}

这是我的第一个解决方案,但它并没有完全按照要求执行。我想执行以下操作:

void mi_handler(int num)
{

    kill(child_process,SIGKILL);
}
int main(int argc, char* argv[])
{
    pid_t pid;

    pid = fork();
    if(pid == 0)
    {   
        execvp(argv[1], &argv[1]);   
    }

    alarm(5);
    struct sigaction act;
    act.sa_handler = mi_handler;
    sigaction(SIGALRM,&act,NULL);

  return(0);
}

先谢谢你。

f4t66c6m

f4t66c6m1#

pid指定给全局变量child_process

pid_t child_process;

void mi_handler(int num)
{

    kill(child_process,SIGKILL);
}
int main(int argc, char* argv[])
{
    pid_t pid;

    pid = fork();
    if(pid == 0)
    {   
        execvp(argv[1], &argv[1]);   
    }

    child_process = pid;
    alarm(5);
    struct sigaction act;
    act.sa_handler = mi_handler;
    sigaction(SIGALRM,&act,NULL);

    // wait for alarm before exiting
    sigset_t set;
    sigemptyset(&set);                                                             
    sigaddset(&set, SIGALRM);
    sigwait(&set);

    return(0);
}

相关问题