processes 2 信号

2024-01-21 19:32
文章标签 信号 processes

本文主要是介绍processes 2 信号,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//父子进程信号通信
//signal 接收信号
//kill 发送信号
[root@localhost chapter11]# cat alarm.c 
/*  In alarm.c, the first function, ding, simulates an alarm clock.  */#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>static int alarm_fired = 0;void ding(int sig)
{alarm_fired = 1;
}/*  In main, we tell the child process to wait for five secondsbefore sending a SIGALRM signal to its parent.  */int main()
{pid_t pid;printf("alarm application starting\n");pid = fork();switch(pid) {case -1:/* Failure */perror("fork failed");exit(1);case 0:/* child */sleep(5);kill(getppid(), SIGALRM);exit(0);}/*  The parent process arranges to catch SIGALRM with a call to signaland then waits for the inevitable.  */printf("waiting for alarm to go off \n");(void) signal(SIGALRM, ding);pause();if (alarm_fired)printf("Ding!\n");printf("done\n");exit(0);
}
[root@localhost chapter11]# ./alarm 
alarm application starting
waiting for alarm to go off 
Ding!
done
[root@localhost chapter11]# 
另一个接收信号的函数 sigaction
[root@localhost chapter11]# cat ctrlc2.c 
#include <signal.h>
#include <stdio.h>
#include <unistd.h>void ouch(int sig)
{printf("OUCH! - I got signal %d\n", sig);
}int main()
{struct sigaction act;act.sa_handler = ouch;sigemptyset(&act.sa_mask);act.sa_flags = 0;sigaction(SIGINT, &act, 0);while(1) {printf("Hello World!\n");sleep(1);}
}
[root@localhost chapter11]# ./ctrlc2
Hello World!
Hello World!
^COUCH! - I got signal 2
Hello World!
^COUCH! - I got signal 2
Hello World!
^COUCH! - I got signal 2
Hello World!
^COUCH! - I got signal 2
Hello World!
^COUCH! - I got signal 2
Hello World!
^COUCH! - I got signal 2
Hello World!
Hello World!
Hello World!
Hello World!
^COUCH! - I got signal 2
Hello World!
Hello World!
Hello World!
^\Quit (core dumped)
[root@localhost chapter11]# 
常用信号:
[root@localhost chapter11]# cat  /usr/include/bits/signum.h 
/* Signal number definitions.  Linux version.Copyright (C) 1995,1996,1997,1998,1999,2003 Free Software Foundation, Inc.This file is part of the GNU C Library.The GNU C Library is free software; you can redistribute it and/ormodify it under the terms of the GNU Lesser General PublicLicense as published by the Free Software Foundation; eitherversion 2.1 of the License, or (at your option) any later version.The GNU C Library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNULesser General Public License for more details.You should have received a copy of the GNU Lesser General PublicLicense along with the GNU C Library; if not, write to the FreeSoftware Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111-1307 USA.  */#ifdef	_SIGNAL_H/* Fake signal functions.  */
#define SIG_ERR	((__sighandler_t) -1)		/* Error return.  */
#define SIG_DFL	((__sighandler_t) 0)		/* Default action.  */
#define SIG_IGN	((__sighandler_t) 1)		/* Ignore signal.  */#ifdef __USE_UNIX98
# define SIG_HOLD	((__sighandler_t) 2)	/* Add signal to hold mask.  */
#endif/* Signals.  */
#define	SIGHUP		1	/* Hangup (POSIX).  */
#define	SIGINT		2	/* Interrupt (ANSI).  */
#define	SIGQUIT		3	/* Quit (POSIX).  */
#define	SIGILL		4	/* Illegal instruction (ANSI).  */
#define	SIGTRAP		5	/* Trace trap (POSIX).  */
#define	SIGABRT		6	/* Abort (ANSI).  */
#define	SIGIOT		6	/* IOT trap (4.2 BSD).  */
#define	SIGBUS		7	/* BUS error (4.2 BSD).  */
#define	SIGFPE		8	/* Floating-point exception (ANSI).  */
#define	SIGKILL		9	/* Kill, unblockable (POSIX).  */
#define	SIGUSR1		10	/* User-defined signal 1 (POSIX).  */
#define	SIGSEGV		11	/* Segmentation violation (ANSI).  */
#define	SIGUSR2		12	/* User-defined signal 2 (POSIX).  */
#define	SIGPIPE		13	/* Broken pipe (POSIX).  */
#define	SIGALRM		14	/* Alarm clock (POSIX).  */
#define	SIGTERM		15	/* Termination (ANSI).  */
#define	SIGSTKFLT	16	/* Stack fault.  */
#define	SIGCLD		SIGCHLD	/* Same as SIGCHLD (System V).  */
#define	SIGCHLD		17	/* Child status has changed (POSIX).  */
#define	SIGCONT		18	/* Continue (POSIX).  */
#define	SIGSTOP		19	/* Stop, unblockable (POSIX).  */
#define	SIGTSTP		20	/* Keyboard stop (POSIX).  */
#define	SIGTTIN		21	/* Background read from tty (POSIX).  */
#define	SIGTTOU		22	/* Background write to tty (POSIX).  */
#define	SIGURG		23	/* Urgent condition on socket (4.2 BSD).  */
#define	SIGXCPU		24	/* CPU limit exceeded (4.2 BSD).  */
#define	SIGXFSZ		25	/* File size limit exceeded (4.2 BSD).  */
#define	SIGVTALRM	26	/* Virtual alarm clock (4.2 BSD).  */
#define	SIGPROF		27	/* Profiling alarm clock (4.2 BSD).  */
#define	SIGWINCH	28	/* Window size change (4.3 BSD, Sun).  */
#define	SIGPOLL		SIGIO	/* Pollable event occurred (System V).  */
#define	SIGIO		29	/* I/O now possible (4.2 BSD).  */
#define	SIGPWR		30	/* Power failure restart (System V).  */
#define SIGSYS		31	/* Bad system call.  */
#define SIGUNUSED	31#define	_NSIG		65	/* Biggest signal number + 1(including real-time signals).  */#define SIGRTMIN        (__libc_current_sigrtmin ())
#define SIGRTMAX        (__libc_current_sigrtmax ())/* These are the hard limits of the kernel.  These values should not beused directly at user level.  */
#define __SIGRTMIN	32
#define __SIGRTMAX	(_NSIG - 1)#endif	/* <signal.h> included.  */
[root@localhost chapter11]# 

信号	值	动作	解释
SIGHUP	1		终端线路挂断
SIGINT	2	Term	键盘输入的中断命令,从终端输入 Ctrl-C 时发生
SIGQUIT	3	Core	键盘输入的退出命令
SIGILL	4	Core	错误指令
SIGABRT	6	Core	abort(3)发出的中止信号
SIGFPE	8	Core	浮点数异常
SIGKILL	9	Term	KILL信号
SIGSEGV	11	Core	非法内存访问
SIGPIPE	13	Term	管道断开
SIGALRM	14	Term	alarm(2)发出的中止信号
SIGTERM	15	Term	强制中止信号
SIGUSR1	30,10,16	Term	用户自定义信号1
SIGUSR2	31,12,17	Term	用户自定义信号2
SIGCHLD	20,17,18	Ign	子进程中止信号
SIGCONT	19,18,25	Cont	继续执行一个停止的进程
SIGSTOP	17,19,23	Stop	非终端来的停止信号
SIGTSTP	18,20,24	Stop	终端来的停止信号
SIGTTIN	21,21,26	Stop	后台进程读终端
SIGTTOU	22,22,27	Stop	后台进程写终端
refer to
http://tech.idv2.com/2006/09/28/useful-linux-signals/


这篇关于processes 2 信号的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/630597

相关文章

列举你能想到的UNIX信号,并说明信号用途

信号是一种软中断,是一种处理异步事件的方法。一般来说,操作系统都支持许多信号。尤其是UNIX,比较重要应用程序一般都会处理信号。 UNIX定义了许多信号,比如SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状态改变信号;SIGKILL表示终止程序运行的信号,等等。信号量编程是UNIX下非常重要的一种技术。 Unix信号量也可以

Linux中如何屏蔽信号

本篇文章主要学习Linux的信号处理机制,着重学习屏蔽信号部分。屏蔽信号处理的两种方式类似于信号的捕获,一种方式是直接对其设置,另一种方式是先获得描述符的掩码,然后对其设置操作。 本文主要参考自《嵌入式linux系统使用开发》,作者何永琪,Thanks. 在linux系统中,如何处理某个进程发送的一个特定信号呢?一般来说有三种方式: 1) 忽略信号 2) 屏蔽信号 3) 为该信号添

信号与信号量的区别[转]

信号量(Semaphore),有时被称为信号灯,是在多环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程,需要创建一个信号量VI,然后将Acquire Semaphore VI以及Release Se

国产隔离放大器:增强信号完整性和系统安全性的指南

隔离放大器是电子领域的关键组件,特别是在信号完整性和电气隔离至关重要的应用中。这些放大器隔离输入和输出信号,使它们能够在没有直接电气连接的情况下跨不同系统传输数据。这确保了电路一部分的高压尖峰或噪声不会影响另一部分,从而保护了系统和用户。随着国产隔离放大器的不断发展,它们提供了性能、可靠性和成本效益的完美结合,使其成为工程师和系统设计师的理想选择。 1. 了解国产隔离放大器的优势 增强信号

信号有效带宽

根据傅里叶变换可以知道信号带宽是无穷大的,这对实际应用是帮助不大的,所以有了有效带宽的概念,可能大家知道常用的经验公式:O.35/Tr或者0.5/Tr等,那这个公式是怎么来的呢?有效带宽又是什么含义呢? 首先来看一个RC低通滤波器,如下: 其上升时间Tr为: 该滤波器的传递函数为: H(s)=1/(RCS+1) 式中S=2πf,转换为频率f的函数为: H(f)=1/(R

Linux 一个简单的中断信号实现

1.查看手册,学习中断处理图 流程:(次级源->开关)到 源挂起 到 开关  到 处理优先级 到 中断挂起标志 到 CPSR里面的开关(图中未展现) 最后cpu处理 此次我们先使用k1按键实现中断,即是eint8 2.此次仅涉及一个中断挂起,步骤较简单,有的寄存器未涉及处理。 寄存器挂起后,通过写1清除对应位( 硬件设计逻辑: 中断标志位通常由硬件自动设置为 1,表示中断发生。

【QT】十分钟全面理解 信号与槽的机制

目录 从一个定时器开始全方位简介1. 基本的信号与槽连接语法例子 2. 使用函数指针连接信号与槽(现代 C++ 风格)语法例子 3. 使用 Lambda 表达式作为槽语法例子 4. 自动连接(`QMetaObject::connectSlotsByName`)规则例子 5. 信号与槽的多对多连接例子(一个信号连接多个槽)例子(多个信号连接一个槽) 6. 断开信号与槽的连接语法例子 7. 信号

RS485差分信号不对称

在RS485总线通信中,差分信号不对称的问题时常出现,尤其是在总线未接从机设备的情况下。这一问题不仅影响通信质量,还可能导致信号传输错误。通过对实际波形、芯片手册及电路的深入分析,可以找出引发差分信号不对称的根本原因,并采取相应的解决措施。 问题描述 在RS485通信测试中,当总线上没有从机设备连接时,观察到RS485差分信号(A、B)关于地(GND)不对称。理想情况下,RS485的差分信

学习记录-Qt信号和槽使用遇到的问题记录

信号和槽的连接方式 1.自动连接 2.队列连接 3.直接连接 软件运行时,在串口线程和主界面线程之间传递参数,在自己的电脑不会丢失,打包到其他电脑运行,数据随机变化。通过log文件分析,在主界面中执行参数传递的函数,在串口线程还没有处理参数就结束了生命周期,导致参数随机变化。 在多线程间通过信号和槽传递参数时一定要注意参数变量的生命周期。

RF射频信号布局布线要点

RF射频信号布局布线要点 一、射频产品布局要求: 1、布局采用一字型布局。在同一个屏蔽腔体内,布局时应该按RF主信号流一字布局由于空间限制,如果在同一个屏蔽腔内,RF主信号的元器件不能采用一字布局时,可以采用L形布局,不要用U字形布局。 2、相同单元的布局要尽量保证完全相同。有多个接收通道和发射通道,就要保证多个通道的布局和布线要完全相同。 3、布局时就要考虑RF主信号走向,和器件