Linux 发送信号
使用kill命令
--在命令行执行kill命令。向指定进程发送信号。
使用kill函数
int kill(pid_t pid,int sig);
--参数pid指定一个要杀死的进程,而sig是要发送的信号。
//kill函数发送信号
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h> #include <sys/types.h>
#include <signal.h> int main(int arg, char *args[])
{
if(arg<)
{
printf("请输入一个参数!\n");
return -;
}
pid_t pid=atoi(args[]);
int resint=;
resint=kill(pid,SIGKILL);
printf("返回值是%d\n",resint);//打印0
return ;
}
使用raise函数
int raise(int signum);
kill函数将信号发送给进程,raise函数允许进程向自身发送信号
raise(signum)相当于kill(getpid(),signum);
alarm函数设置了一个定时器,当定时器到了给当前进程发送SIGALRM信号。
unsigned int alarm(unsigned int seconds);
seconds是计时器时间到后时钟的秒数。
如果没有设置其他超时,函数返回0,否则返回值为前面安排超时中保留的秒数。
一个进程只能设置一次超时
把seconds设置为0可以取消前面的超时设置。
//捕捉信号
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <signal.h> void catch_signal(int sign)
{
switch(sign)
{
case SIGINT:
//SIGINT默认行为是退出进程
printf("SIGINT signal\n");
exit();
break;
case SIGALRM:
//SIGALRM默认行为是退出进程
printf("SIGALRM signal\n");
alarm();
break;
case SIGKILL:
printf("SIGKILL signal\n");
break;
}
} int main(int arg, char *args[])
{
signal(SIGINT,catch_signal);
signal(SIGALRM,catch_signal);
signal(SIGKILL,catch_signal);
int i=;
//永远循环的alarm信号
alarm();
while()
{
printf("hello god %d\n",i++);
sleep();
}
return ;
}
abort函数
void abort(void);
该函数发送SIGABRT信号给调用进程,进程不应该忽略这个信号。
即使进程捕捉到SIGABRT这个信号,进程还是会异常退出
让进程捕捉SIGABRT的意图是在进程终止前由其执行所需的清理操作。
sleep函数
unsigned int sleep(unsigned int seconds);
参数seconds指定了睡眠时间。
超过seconds制定时间,函数返回。
嗲用进程捕捉到一个信号并从信号处理程序返回。
sleep()函数只要捕捉到一个信号就会终止sleep()函数。
作业控制信号
--SIGCHID 子进程已停止或终止
--SIGCONT 如果进程已经停止,使其继续运行
--SIGSTOP 停止信号,不能被捕捉或者忽略
--SIGTIN 后台进程组成员读控制终端
--SIGTTOU 后台进程组成员写到控制终端
除了SIGCHLD意外,大多数程序并不处理这些信号。
shell程序一般需要处理这些信号。
信号用于大多复杂的应用程序中。
理解信号处理对于Linux变成非常重要。
Linux 发送信号的更多相关文章
- linux驱动的异步通知(kill_fasync,fasync)---- 驱动程序向应用程序发送信号
应用程序 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include < ...
- Linux驱动实践:中断处理函数如何【发送信号】给应用层?
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...
- Linux 命令 - kill: 向进程发送信号
kill 命令通常用来 “杀死”(终止)进程,它可以用来终止运行不正常的程序或者反过来拒绝终止的程序.kill 命令准确地说并不是 “杀死” 进程,而是给进程发送信号(signal). 和文件一样,进 ...
- Linux 命令 - killall: 通过进程名向进程发送信号
命令格式 killall [-Z CONTEXT] [-u USER] [ -eIgiqrvw ] [ -SIGNAL ] NAME... killall -l, --list killall -V, ...
- Linux 父进程发送信号杀死子进程
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <signal. ...
- linux有关信号的FAQ
1.为什么会出现系统调用被中断的情况? 进程在执行一个低速系统调用而阻塞期间捕捉到一个信号时,该系统调用就被中断不再继续执行.该系统调用返回出错,其errno被设置为EINTR.这样处理的理由是:因为 ...
- linux kill信号列表
linux kill信号列表 $ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) ...
- Linux进程间通信-信号
1.什么是信号信号是Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会执行相应的操作. 2.信号的产生1)由硬件产生,如从键盘输入Ctrl+C可以终止当前进程2)由其他进程发送,如可在s ...
- Linux进程间通信——信号集函数
一.什么是信号 用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中 ...
随机推荐
- Python: 解决pip安装源被墙的问题
pip install <package> -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.c ...
- Struts2(十四)拦截器实现权限管理
一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截 ...
- iOS— UIScrollView和 UIPageControl之间的那些事
本代码主要实现在固定的位置滑动图片可以切换. 目录图如下: ViewController.h #import <UIKit/UIKit.h> // 通过宏定义定义宽和高 #define W ...
- (android) SharedPreferences 两种方式的存储范围
1 SharedPreferences settings =Activity.getPreferences(Activity.MODE_PRIVATE); 访问数据的范围为 当前的activity 2 ...
- http://runjs.cn/
http://runjs.cn/ RunJS - 在线编辑.展示.分享.交流你的 JavaScript 代码
- 编译时:virtual memory exhausted: Cannot allocate memory
一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编译程序会出现virtual memory exhausted: Cannot allocate memory的问题,可以用swap扩 ...
- IE6-8中Date不支持toISOString方法
Date.prototype.toISOString方法是在ES5里添加的,ES3文档中没有,如下 这个方法在IE6/7/8中不支持,可按下面方式修复下 if (!Date.prototype.toI ...
- poj 2391 Ombrophobic Bovines(最大流+floyd+二分)
Ombrophobic Bovines Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 14519Accepted: 3170 De ...
- SVN同步大坑
遇到的问题 这两天一直在搞svn的主从备份,使用的方法是svnsync做的主从同步,同步大部分的仓库都没有什么问题很顺利的就同步完成了,不了解svnsync同步的可以看我这篇,但是在在同步2个仓库的时 ...
- 学完STM32开发板,就选4412开发板让你有目标的学习嵌入式开发
600余页用户使用手册 linux实验手册(资料不断更新)100期配套零基础高清视频教程 轻松入门 (资料不断更新)2000人售后认证群 在线支持 售后无忧 源码全开源 原厂技术资料经典学习书籍推荐 ...