linux信号

Linux下快速手动产生core文件

你。 提交于 2019-12-06 20:31:25
原文链接: https://blog.csdn.net/jctian000/article/details/79695006 当我们配置好自动生成core文件的环境后,若不想写导致崩溃的程序验证,那要怎么快速产生core呢? 先看下产生core文件的条件: 当程序接收到以下UNIX信号会产生core文件: 在系统默认动作列,“终止w/core”表示在进程当前工作目录的core文件中复制了该进程的存储图像(该文件名为core,由此可以看出这种功能很久之前就是UNIX功能的一部分)。大多数UNIX调试程序都使用core文件以检查进程在终止时的状态。 core文件的产生不是POSIX.1所属部分,而是很多UNIX版本的实现特征。UNIX第6版没有检查条件(a)和(b),并且其源代码中包含如下说明:“如果你正在找寻保护信号,那么当设置-用户-ID命令执行时,将可能产生大量的这种信号”。4.3 + BSD产生名为core.prog的文件,其中prog是被执行的程序名的前1 6个字符。它对core文件给予了某种标识,所以是一种改进特征。 表中“硬件故障”对应于实现定义的硬件故障。这些名字中有很多取自UNIX早先在DP-11上的实现。请查看你所使用的系统的手册,以确切地确定这些信号对应于哪些错误类型。 下面比较详细地说明这些信号。 • SIGABRT 调用abort函数时产生此信号。进程异常终止

Linux进程间通讯方式

拟墨画扇 提交于 2019-12-06 08:05:13
我们常常使用的进程间通讯主要有信号、管道、共享内存、消息队列、信号量、socket这六种方式。 (一)信号 (1)它是一种通知机制;一种提前定义好的某些特定事件。信号可以被产生也可以被接收;信号最重要的就是如何发送信号,如何修改响应方式?Linux下支持的信号,举例有: SIGCHLID:表示子进程终止,默认对此信号的响应方式是“SIG_IGN”忽略; SIGINT:表示用户产生终止符,默认对此信号的响应方式是终止; SIGKILL:表示不能被捕捉的终止进程的信号,默认对此信号的响应方式是终止; SIGSTOP:不能被不捕获的挂起进程的信号,默认对此信号的响应方式是终止; (2)发送信号 int kill(pid_t pid,int signo):给pid代表的进程发送信号;当pid==0时,信号被发送给调用进程的进程组的每个进程;pid==-1时,信号会向每个调用进程有权限发送信号的进程发出信号,调用进程自身和init除外;pid < -1时,信号被发送给进程组的-pid; 注意:给自己发送信号:int raise(int signal):调用成功后返回0,不成返回非0值,不设置error; (3)修改信号的响应方式‘ 1.常见的响应方式 SIG_DFL:默认 SIG_ING:忽略 自定义 2.修改响应方式的函数 t ypedef void (*Fun_Hangdle(int)

和菜鸟一起学linux之DBUS基础学习记录

旧街凉风 提交于 2019-12-06 07:24:49
D-Bus三层架构 D-Bus是一个为应用程序间通信的消息总线系统, 用于进程之间的通信。它是个3层架构的IPC 系统,包括: 1、函数库libdbus ,用于两个应用程序互相联系和交互消息。 2、一个基于libdbus构造的消息总线守护进程,可同时与多个应用程序相连,并能把来自一个应用程序的消息路由到0或者多个其他程序。 3、基于特定应用程序框架的封装库或捆绑(wrapper libraries or bindings )。例如,libdbus-glib和libdbus-qt,还有绑定在其他语言,例如Python的。大多数开发者都是使用这些封装库的API,因为它们简化了D-Bus编程细节。libdbus被有意设计成为更高层次绑定的底层后端(low-levelbackend )。大部分libdbus的 API仅仅是为了用来实现绑定。 总线   在D-Bus中,“bus”是核心的概念,它是一个通道:不同的程序可以通过这个通道做些操作,比如方法调用、发送信号和监听特定的信号。在一台机器上总线守护有多个实例(instance)。这些总线之间都是相互独立的。 一个持久的系统总线(system bus): 它在引导时就会启动。这个总线由操作系统和后台进程使用,安全性非常好,以使得任意的应用程序不能欺骗系统事件。它是桌面会话和操作系统的通信,这里操作系统一般而言包括内核和系统守护进程

linux之DBUS基础学习记录

99封情书 提交于 2019-12-06 07:20:19
D-Bus三层架构 D-Bus是一个为应用程序间通信的消息总线系统, 用于进程之间的通信。它是个3层架构的IPC 系统,包括: 1、函数库libdbus ,用于两个应用程序互相联系和交互消息。 2、一个基于libdbus构造的消息总线守护进程,可同时与多个应用程序相连,并能把来自一个应用程序的消息路由到0或者多个其他程序。 3、基于特定应用程序框架的封装库或捆绑(wrapper libraries or bindings )。例如,libdbus-glib和libdbus-qt,还有绑定在其他语言,例如Python的。大多数开发者都是使用这些封装库的API,因为它们简化了D-Bus编程细节。libdbus被有意设计成为更高层次绑定的底层后端(low-levelbackend )。大部分libdbus的 API仅仅是为了用来实现绑定。 总线   在D-Bus中,“bus”是核心的概念,它是一个通道:不同的程序可以通过这个通道做些操作,比如方法调用、发送信号和监听特定的信号。在一台机器上总线守护有多个实例(instance)。这些总线之间都是相互独立的。 一个持久的系统总线(system bus): 它在引导时就会启动。这个总线由操作系统和后台进程使用,安全性非常好,以使得任意的应用程序不能欺骗系统事件。它是桌面会话和操作系统的通信,这里操作系统一般而言包括内核和系统守护进程

Linux进程调度原理

送分小仙女□ 提交于 2019-12-05 07:23:52
Linux进程调度原理 Linux进程调度的目标     1.高效性:高效意味着在相同的时间下要完成更多的任务。调度程序会被频繁的执行,所以调度程序要尽可能的高效;     2.加强交互性能:在系统相当的负载下,也要保证系统的响应时间;     3.保证公平和避免饥渴;     4.SMP调度:调度程序必须支持多处理系统;     5.软实时调度:系统必须有效的调用实时进程,但不保证一定满足其要求; Linux进程优先级   进程提供了两种优先级,一种是普通的进程优先级,第二个是实时优先级。前者适用SCHED_NORMAL调度策略,后者可选SCHED_FIFO或SCHED_RR调度策略。 任何时候,实时进程的优先级都高于普通进程 ,实时进程只会被更高级的实时进程抢占,同级实时进程之间是按照FIFO(一次机会做完)或者RR(多次轮转)规则调度的。    首先,说下实时进程的调度   实时进程,只有静态优先级,因为内核不会再根据休眠等因素对其静态优先级做调整,其范围在0~MAX_RT_PRIO-1间。默认MAX_RT_PRIO配置为100,也即,默认的实时优先级范围是0~99。而nice值,影响的是优先级在MAX_RT_PRIO~MAX_RT_PRIO+40范围内的进程。   不同与普通进程,系统调度时,实时优先级高的进程总是先于优先级低的进程执行。知道实时优先级高的实时进程无法执行

linux中的常用信号

一世执手 提交于 2019-12-05 02:13:47
首先看看linux中的常用信号,见如下列表: 信号名 值 标注 解释 —————————————————————————————————————————————————————————————————— HUP 1 A 检测到挂起,也可让守护进程重读配置 INT 2 A 来自键盘的中断 QUIT 3 A 来自键盘的停止 ILL 4 A 非法指令 ABRT 6 C 失败 FPE 8 C 浮点异常 KILL 9 AF 终端信号 USR1 10 A 用户定义的信号1 SEGV 11 C 非法内存访问 USR2 12 A 用户定义的信号2 PIPE 13 A 写往没有读取者的管道 ALRM 14 A 来自闹钟的定时器信号 TERM 15 A 终端信号 CHLD 17 B 子进程终止 CONT 18 E 如果被停止则继续 STOP 19 DF 停止进程 TSTP 20 D tty键入的停止命令 TTIN 21 D 对后台进程的tty输入 TTOU 22 D 对后台进程的tty输出 来源: https://www.cnblogs.com/outsrkem/p/11896048.html

Linux系统进程管理

谁都会走 提交于 2019-12-04 17:33:22
Linux系统进程管理 阅读量: 210 进程介绍 进程管理 进程优先级 什么是进程? Linux系统中的几乎任何行动都会以进程的形式进行。如果你用网络浏览器查看网页,浏览器就作为进程运行。如果键入bash shell的命令行,这个shell就作为进程运行。如果你用chmod命令来更改文件权限,chmod就作为单独的进程来执行。进程是完成工作的形式,linux内核的基本职责就是为进程提供做事情的地方,不让彼此撞车。 进程是已启动的可执进程序的运行实例,进程有以下组成部分: 1 已分配内存的地址空间 2 安全属性,包括所有权凭据个特权 3 程序代码的一个或多个执行进程 4 进程状态 进程与程序区分 程序:二进制文件,静态。 进程:是程序运行的过程,动态,有生命周期及运行状态 进程的属性: 1. 进程ID(PID):是唯一的值,用来区分进程 2. 父进程(PPID) 3. 启动进程的用户ID(UID)和所归属的组(GID) 4. 进程状态:分为运行R,休眠S,僵尸Z 5. 进程执行的优先级 6. 进程所连接的终端名 7. 进程资源占用:如内存、CPU等 进程(Process)是一个程序在其自身的虚拟地址空间中的一次执行活动。之所以要创建进程,就是为了使多个程序可以并发的执行,从而提高系统的资源利用率和吞吐量。 程序只是一个静态的指令集合;而进程是一个程序的动态执行过程,它具有生命期

linux kill信号列表

删除回忆录丶 提交于 2019-12-04 07:15:01
列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。 下面我们对编号小于SIGRTMIN的信号进行讨论。 1) SIGHUP 本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。 登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个Session。当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终止进程,因此前台进 程组和后台有终端输出的进程就会中止。不过可以捕获这个信号,比如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也 能继续下载。 此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。 2) SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。 3) SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制.

Linux 的各种 signal

佐手、 提交于 2019-12-03 13:17:01
2) SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。 3) SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。 4) SIGILL 执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号。 5) SIGTRAP 由断点指令或其它trap指令产生. 由debugger使用。 6) SIGABRT 调用abort函数生成的信号。 7) SIGBUS 非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。它与SIGSEGV的区别在于后者是由于对合法存储地址的非法访问触发的(如访问不属于自己存储空间或只读存储空间)。 8) SIGFPE 在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误。 9) SIGKILL 用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可尝试发送这个信号。 10) SIGUSR1 留给用户使用 11) SIGSEGV 试图访问未分配给自己的内存,

Linux nohup和&amp;的功效

匿名 (未验证) 提交于 2019-12-02 21:59:42
nohup和&究竟有啥区别?不少同学进行了回复,但并不是所有同学都理解得全对,今天把自己挖的坑自己填了。 测试代码如下: 是一个输出hello与循环轮数的死循环程序,每输出一行就休眠1秒。 使用 ./a.out 前台运行程序,会是什么效果呢? 程序每隔一秒会在终端输出一个字符串。 使用 ./a.out& 后台运行程序,会是什么效果呢? 如上图: 首先会在终端显示进程号是32389 键入Ctrl + C,发出SIGINT信号,程序会继续运行 ps确认一下,确认进程依然在运行,进程号是32389。 此时如果关掉session,程序会收到一个SIGHUP信号,此时会怎么样呢? ps再次确认,可以看到关闭session之后,进程号是32389的a.out进程也关闭了。 使用nohup ./a.out 又会是什么效果呢? 使用nohup 运行程序a.out,会发现: 前台没有出现进程号 有一个“忽略输入,输出至nohup.out”的提示 hello的输出也没有出现在前台 手动ps看进程号,这次a.out的进程号是32437。 此时如果关掉session,程序会收到一个SIGHUP信号,程序会不会关闭呢? 关掉session后,再次ps看一下,ID为32437的a.out进程还在。 这些只能通过kill把程序干掉了,killall之后,ps查看进程已经关闭。 killall之后