linux信号处理--通过发送信号控制进程
2015-05-30 11:19
567 查看
要求:
实现两个程序mysignal、mycontrl,
mycontrl给mysignal发送SIGINT信号,控制mysiganl是否在屏幕打印"hello,world"字符串.
//makefile
//mysignal.c
//mycontrol.c
运行效果:
实现两个程序mysignal、mycontrl,
mycontrl给mysignal发送SIGINT信号,控制mysiganl是否在屏幕打印"hello,world"字符串.
//makefile
.SUFFIXES: .c .o CC=gcc SRCS1=mysignal.c SRCS2=mycontrol.c OBJS1=$(SRCS1:.c=.o) OBJS2=$(SRCS2:.c=.o) EXEC1=mysignal EXEC2=mycontrol all: $(OBJS1) $(OBJS2) $(CC) -o $(EXEC1) $(OBJS1) $(CC) -o $(EXEC2) $(OBJS2) @echo '-------------ok--------------' .c.o: $(CC) -g -o $@ -c $< clean: rm -f $(OBJS1) $(OBJS2) rm -f core*
//mysignal.c
#include <stdio.h> #include <stdlib.h> #include <signal.h> int status = 0;//全局量,1-打印,0-不打印 void catch_Signal(int Sign) { switch (Sign) { case SIGINT: if (status == 0) { status = 1; } else { status = 0; } } } int signal1(int signo, void(*func)(int)) { struct sigaction act, oact; act.sa_handler = func; sigemptyset(&act.sa_mask); act.sa_flags = 0; return sigaction(signo, &act, &oact); } int main(int arg, char *args[]) { signal1(SIGINT, catch_Signal);//捕捉SIGINT信号 while (1) { if (status)//如果status为1,打印字符串”hello“ { puts("hello, world"); } sleep(1); } return 0; }
//mycontrol.c
#include <stdio.h> #include <stdlib.h> #include <signal.h> int main(int arg, char *args[]) { if (arg < 2)//如果没有参数,main返回 { return -1; } else { int pid = atoi(args[1]); kill(pid, SIGINT);//向指定的pid发送SIGINT信号 } return 0; }
运行效果:
相关文章推荐
- linux 远程连接ssh提示IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY
- linux内核线程,进程,线程
- Linux(RHEL6)启动过程详解
- Linux-缓存文件写入失败!
- RHEL6 Tiny Linux 的制作
- RHEL5 tiny linux的制作
- linux下安装wine
- Linux的概念与体系(详见网页)
- 《Linux内核设计与实现》读书笔记之系统调用
- RHEL7(124)KVM虚拟机
- RHEL7(124)LINUX文件系统
- RHEL7 (124)系统间的文件传递
- RHEL7 (124)分析和存储日志
- RHEL7 (124)控制服务和后台进程
- RHEL7(124) 获取帮助信息
- RHEL7(124) 管道和VI的使用
- RHEL7(124) 从命令行访问文件
- Linux系统下如何查看已经登录用户
- RHEL7(124) 访问命令行
- linux reset the root user password