[linux]signal函数不起作用
#include "apue.h" #include <sys/wait.h> static void sig_int(int); /* our signal-catching function */ int main(int argc, char *argv[])
{
printf("uid = %d, gid = %d\n", getuid(), getgid()); char buf[MAXLINE]; /* from apue.h */
pid_t pid;
int status; // register the signal handler
if ( signal(SIGINT, sig_int) == SIG_ERR)
err_sys("signal error"); printf("%% "); /* print prompt (printf requires %% to print %) */
while (fgets(buf, MAXLINE, stdin) != NULL) {
if (buf[strlen(buf) - ] == '\n')
buf[strlen(buf) - ] = ; /* replace newline with null */
if ((pid = fork()) < ) {
err_sys("fork error");
} else if (pid == ) { /* child */
execlp(buf, buf, (char *));
err_ret("couldn't execute: %s", buf);
exit();
}
/* parent */
if ((pid = waitpid(pid, &status, )) < )
err_sys("waitpid error");
printf("Last pid: %ld\n", (long)pid);
printf("%% ");
} exit();
} void sig_int(int signo)
{
printf("sig_int: interrupt\n%% ");
exit(); // I add this line to exit the program through CTRL+C (SIGINT), CTRL+D is to terminate the program
}
代码来自APUE Figure1.10
我编译之后用gdb调试,发现sig_int始终不会被调用
最后终于发现问题是因为编译选项加了-g,在调试状态下signal机制貌似被禁用了
[linux]signal函数不起作用的更多相关文章
- linux signal函数遇到的问题
1.关于signal函数的定义 signal最开始的原型是这: void (*signal(int signo, void (*func)(int)))(int);看过下面两行,了解到上面这一行是这个 ...
- Linux 信号详解一(signal函数)
信号列表 SIGABRT 进程停止运行 SIGALRM 警告钟 SIGFPE 算述运算例外 SIGHUP 系统挂断 SIGILL 非法指令 SIGINT 终端中断 SIGKILL 停止进程(此信号不能 ...
- Signal ()函数详细介绍 Linux函数
http://blog.csdn.net/ta893115871/article/details/7475095 Signal ()函数详细介绍 Linux函数 signal()函数理解 在<s ...
- Signal ()函数详细介绍 Linux函数(转)
Signal ()函数详细介绍 Linux函数 收藏人:紫火神兵 2012-09-27 | 阅:5659 转:22 | 来源 | 分享 signa ...
- 三十、Linux 进程与信号——信号的概念及 signal 函数
30.1 信号的基本概念 信号(signal)机制是Linux 系统中最为古老的进程之间的通信机制,解决进程在正常运行过程中被中断的问题,导致进程的处理流程会发生变化 信号是软件中断 信号是异步事件 ...
- Linux下利用signal函数处理ctrl+c等信号
前言 linux下能够通过信号机制来实现程序的软中断,是一个很实用的编程方法. 我们平时在程序执行的时候按下ctrl-c.ctrl-z或者kill一个进程的时候事实上都等效于向这个进程发送了一个特定信 ...
- Linux 信号(二)—— signal 函数
弗洛伊德认为:要解决这些苦恼,当事人就要通过回忆并理解自己早期的童年经历,来获得对潜意识冲突的顿悟.弗洛伊德的疗法被称为“精神分析” (psychoanalysis),在 20 世纪的很长一段时间被心 ...
- signal函数、sigaction函数及信号集(sigemptyset,sigaddset)操作函数
信号是与一定的进程相联系的.也就是说,一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如,一个进程可以忽略某些信号而只处理其他一些信号:另外,一个进程还可以选择如何处理信号.总之,这些总与特定 ...
- linux signal 用法和注意事项
http://blog.chinaunix.net/uid-9354-id-2425031.html 所以希望能用相同方式处理信号的多次出现,最好用sigaction.信号只出现并处理一次,可以用si ...
随机推荐
- iOS中WebKit框架应用与解析
WebKit是iOS8之后引入的专门负责处理网页视图的框架,其比UIWebView更加强大,性能也更优. 引言 在iOS8之前,在应用中嵌入网页通常需要使用UIWebView这样一个类,这个类通过UR ...
- 数学图形(1.38)anguinea曲线
个人觉得,这是一种变异的SIN曲线. #http://www.mathcurve.com/courbes2d/anguinee/anguinee.shtml vertices = t = from ( ...
- Informatica 常用组件Source Qualifier之三 联接查询
联接源数据 可以使用一个源限定符转换来联接来自多个关系表的数据.这些表必须能从相同的实例或数据库服务器访问.当映射使用相关的关系源时,您可以在一个源限定符转换中同时联接两个源.在会话期间,源数据库在传 ...
- 如何更改postgresql的最大连接数
改文件 postgresql.conf 里的 #max_connections=32 为 max_connections=1024 以及另外相应修改 share_buffer 参数.
- Scurm 术语
角色 Product Owner Scrum Master Team 工件(Backlog) Product Backlog Sprint Backlog Burndown Backlog 活动 Sp ...
- JavaScript计算两个日期的时间差
/** * * @param startTime * @param endTime * @param diffType * @returns {Number|number} * @constructo ...
- (笔试题)数组A中任意两个相邻元素大小相差1,在其中查找某个数。
题目: 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置.如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置. 思路: 很明显,在数组中寻找 ...
- Discuz常见小问题-如何设置为人工审核
全局-注册与访问控制-人工审核
- PHP - AJAX 与 PHP
PHP - AJAX 与 PHP AJAX 被用于创建交互性更强的应用程序. AJAX PHP 实例 下面的实例将演示当用户在输入框中键入字符时,网页如何与 Web 服务器进行通信: 实例 尝试在输入 ...
- 转:VB用ADO连接SQLServer数据库
'数据源信息常量 Public Const conn As String = "Provider = SQLOLEDB.1;Password = sa; UserID = sa; Initi ...