父进程必须在报警后向子进程发送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);
}
先谢谢你。
1条答案
按热度按时间f4t66c6m1#
将
pid
指定给全局变量child_process
。