您的位置:首页 > 运维架构 > Linux

linux 练习六 信号的发送与信号处理

2017-12-02 21:31 239 查看
题目:实现两个程序mysignal、mycontrl,mycontrl给mysignal发送SIGINT信号,控制mysignal是否在屏幕打印“hello”字符串。

//mycontrol.c
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc , char *argv[])
{
pid_t result = 0;
int ret = 0;
result = fork();
printf("fork result=%d\n",result);
if(result < 0)
{
perror("fork");
exit(1);
}
else if(result == 0)
{
printf("now in child,pid=%d\n",getpid());
ret = execl("./mysignal.o","mysignal.o",NULL);
if(ret < 0)
{
perror("execl");
exit(1);
}
printf("child process exit\n");

}
else
{
int cyccnt = 0;
printf("in parent child pid=%d\n",result);
sleep(3);
do
{
ret = kill(result,SIGINT);
if(ret < 0)
{
perror("kill");
}
sleep(3);
cyccnt++;
}while(cyccnt < 3);

result = waitpid(result,NULL,0);
printf("child process=%d,return\n",result);
}
}

//mysignal.c
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <signal.h>
#include <string.h>
#include <unistd.h>

void signal_handler(int signo)
{
printf("hello signal=%d\n",signo);
}

int mysignal(int signo,void (*sighandler)(int signo))
{
struct sigaction newact,oldact;
int ret = 0;
newact.sa_handler = sighandler;
ret = sigemptyset(&newact.sa_mask);
if(ret < 0)
{
perror("sigemptyset");
return -1;
}
newact.sa_flags = 0;
ret = sigaction(signo,&newact,&oldact);
if(ret < 0)
{
perror("sigaction");
return -1;
}
return 0;
}

int main(int argc, char *argv[])
{
int cyccnt = 0;
int ret;
printf("mysignal pid=%d\n",getpid());

//  signal(SIGINT,signal_handler);
ret =  mysignal(SIGINT,signal_handler);
if(ret < 0)
{
perror("  mysignal");
exit(1);
}
while(1)
{
printf("wait for signal\n");
sleep(2);
cyccnt++;
if(cyccnt > 4)
{
break;
}
}
exit(0);
}


book@ubuntu:~/watchman$ ./mycontrol.o 

fork result=4480

in parent child pid=4480

fork result=0

now in child,pid=4480

mysignal pid=4480

wait for signal

wait for signal

hello signal=2

wait for signal

wait for signal

hello signal=2

wait for signal

child process=4480,return
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  百炼成钢